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.
Files changed (97) hide show
  1. {use_computer-0.0.30 → use_computer-0.0.32}/PKG-INFO +11 -26
  2. {use_computer-0.0.30 → use_computer-0.0.32}/README.md +6 -7
  3. {use_computer-0.0.30 → use_computer-0.0.32}/pyproject.toml +2 -7
  4. {use_computer-0.0.30 → use_computer-0.0.32}/scripts/smoke_wheel.py +109 -5
  5. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/__init__.py +2 -8
  6. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/debug/README.md +1 -1
  7. use_computer-0.0.32/use_computer/agents/debug/__init__.py +5 -0
  8. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/debug/agent.py +1 -0
  9. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/agents.py +7 -1
  10. {use_computer-0.0.30 → use_computer-0.0.32}/uv.lock +5 -33
  11. use_computer-0.0.30/use_computer/agents/debug/__init__.py +0 -5
  12. {use_computer-0.0.30 → use_computer-0.0.32}/.env.example +0 -0
  13. {use_computer-0.0.30 → use_computer-0.0.32}/.gitignore +0 -0
  14. {use_computer-0.0.30 → use_computer-0.0.32}/.pre-commit-config.yaml +0 -0
  15. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/__init__.py +0 -0
  16. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/accessibility.py +0 -0
  17. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/base/__init__.py +0 -0
  18. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/base/actions.py +0 -0
  19. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/base/agent.py +0 -0
  20. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/base/artifacts.py +0 -0
  21. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/base/desktop.py +0 -0
  22. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/base/final_state.py +0 -0
  23. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/base/prompts.py +0 -0
  24. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/base/recordings.py +0 -0
  25. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/base/sandbox.py +0 -0
  26. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/base/screenshots.py +0 -0
  27. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/base/trajectory.py +0 -0
  28. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/core.py +0 -0
  29. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/debug/actions.py +0 -0
  30. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/debug/models.py +0 -0
  31. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/ios/__init__.py +0 -0
  32. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/ios/agent.py +0 -0
  33. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/ios/tools.py +0 -0
  34. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/prompts/anthropic.txt +0 -0
  35. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/prompts/gemini.txt +0 -0
  36. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/prompts/ios.txt +0 -0
  37. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/prompts/openai.txt +0 -0
  38. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/prompts/pyautogui.txt +0 -0
  39. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/providers/__init__.py +0 -0
  40. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/providers/anthropic.py +0 -0
  41. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/providers/gemini.py +0 -0
  42. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/providers/generic.py +0 -0
  43. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/providers/openai.py +0 -0
  44. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/agents/types.py +0 -0
  45. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/ax_transpile.py +0 -0
  46. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/client.py +0 -0
  47. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/display.py +0 -0
  48. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/errors.py +0 -0
  49. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/__init__.py +0 -0
  50. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/__init__.py +0 -0
  51. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/gateway.py +0 -0
  52. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/platforms/__init__.py +0 -0
  53. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/platforms/ios.py +0 -0
  54. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/platforms/macos.py +0 -0
  55. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/platforms/ubuntu.py +0 -0
  56. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/platforms/windows.py +0 -0
  57. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/setup_files.py +0 -0
  58. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/use_computer.py +0 -0
  59. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/utils/__init__.py +0 -0
  60. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/harbor/environment/utils/verifier.py +0 -0
  61. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/ios/__init__.py +0 -0
  62. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/ios/apps.py +0 -0
  63. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/ios/environment.py +0 -0
  64. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/ios/input.py +0 -0
  65. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/macos/__init__.py +0 -0
  66. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/macos/keyboard.py +0 -0
  67. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/macos/mouse.py +0 -0
  68. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/models.py +0 -0
  69. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/parsers.py +0 -0
  70. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/py.typed +0 -0
  71. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/recording.py +0 -0
  72. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/resources/__init__.py +0 -0
  73. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/resources/accessibility.py +0 -0
  74. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/resources/display.py +0 -0
  75. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/resources/recording.py +0 -0
  76. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/resources/screenshot.py +0 -0
  77. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/retry.py +0 -0
  78. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/sandbox.py +0 -0
  79. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/screenshot.py +0 -0
  80. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/simulators.py +0 -0
  81. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/__init__.py +0 -0
  82. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/pre_command.ps1 +0 -0
  83. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/pre_command.sh +0 -0
  84. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/task.toml +0 -0
  85. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_ios.sh +0 -0
  86. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_ios_nograder.sh +0 -0
  87. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_macos.sh +0 -0
  88. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_macos_check.sh +0 -0
  89. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_macos_nograder.sh +0 -0
  90. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_ubuntu.sh +0 -0
  91. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_ubuntu_check.sh +0 -0
  92. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_ubuntu_nograder.sh +0 -0
  93. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_windows.sh +0 -0
  94. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_windows_check.sh +0 -0
  95. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/tasks/templates/test_windows_nograder.sh +0 -0
  96. {use_computer-0.0.30 → use_computer-0.0.32}/use_computer/windows/__init__.py +0 -0
  97. {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.30
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]" # shared agent helpers + debug agent
60
- pip install "use-computer[agents-openai]" # or agents-anthropic / agents-gemini / agents-litellm / agents-all
61
- pip install "use-computer[harbor]" # Harbor environment adapter (Python 3.12+)
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-*` extras install
66
- model-provider dependencies; `harbor` installs Harbor plus the environment
67
- adapter dependencies, but no provider SDKs.
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]" # shared agent helpers + debug agent
14
- pip install "use-computer[agents-openai]" # or agents-anthropic / agents-gemini / agents-litellm / agents-all
15
- pip install "use-computer[harbor]" # Harbor environment adapter (Python 3.12+)
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-*` extras install
20
- model-provider dependencies; `harbor` installs Harbor plus the environment
21
- adapter dependencies, but no provider SDKs.
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.30"
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 = ["Pillow>=10"]
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 extras for provider-backed agents:
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 an optional agent extra. Install one of "
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:DebugCUAAgent`.
9
+ Direct SDK import path: `use_computer.agents.debug:DebugComputerAgent`.
10
10
  Harbor wrapper import path: `use_computer.harbor.agents:DebugCUAAgent`.
@@ -0,0 +1,5 @@
1
+ """Debug agent package."""
2
+
3
+ from use_computer.agents.debug.agent import DebugComputerAgent, DebugCUAAgent
4
+
5
+ __all__ = ["DebugComputerAgent", "DebugCUAAgent"]
@@ -70,6 +70,7 @@ class DebugCUAAgent(BaseCUAAgent):
70
70
  context: Any,
71
71
  ) -> None:
72
72
  sandbox = await self.pre_run(environment)
73
+ self.steps[0]["message"] = instruction
73
74
 
74
75
  if self.replay:
75
76
  await self._run_replay(sandbox)
@@ -32,7 +32,13 @@ class _HarborAgent(BaseAgent):
32
32
  mcp_servers=mcp_servers,
33
33
  skills_dir=skills_dir,
34
34
  )
35
- cls = getattr(import_module(self.agent_module), self.agent_name)
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-all'", specifier = ">=0.86" },
4823
- { name = "anthropic", marker = "extra == 'agents-anthropic'", specifier = ">=0.86" },
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-all'", specifier = ">=1" },
4829
- { name = "litellm", marker = "extra == 'agents-litellm'", specifier = ">=1" },
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", "agents-openai", "agents-anthropic", "agents-litellm", "agents-gemini", "agents-all", "harbor"]
4813
+ provides-extras = ["agents", "harbor"]
4842
4814
 
4843
4815
  [package.metadata.requires-dev]
4844
4816
  dev = [
@@ -1,5 +0,0 @@
1
- """Debug agent package."""
2
-
3
- from use_computer.agents.debug.agent import DebugCUAAgent
4
-
5
- __all__ = ["DebugCUAAgent"]
File without changes