hyperbrowser 0.44.0__py3-none-any.whl → 0.72.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 hyperbrowser might be problematic. Click here for more details.

Files changed (38) hide show
  1. hyperbrowser/client/async_client.py +4 -0
  2. hyperbrowser/client/base.py +1 -1
  3. hyperbrowser/client/managers/async_manager/agents/__init__.py +2 -0
  4. hyperbrowser/client/managers/async_manager/agents/browser_use.py +8 -0
  5. hyperbrowser/client/managers/async_manager/agents/gemini_computer_use.py +71 -0
  6. hyperbrowser/client/managers/async_manager/computer_action.py +165 -0
  7. hyperbrowser/client/managers/async_manager/crawl.py +1 -0
  8. hyperbrowser/client/managers/async_manager/scrape.py +1 -0
  9. hyperbrowser/client/managers/async_manager/session.py +42 -1
  10. hyperbrowser/client/managers/async_manager/team.py +12 -0
  11. hyperbrowser/client/managers/sync_manager/agents/__init__.py +2 -0
  12. hyperbrowser/client/managers/sync_manager/agents/browser_use.py +8 -0
  13. hyperbrowser/client/managers/sync_manager/agents/claude_computer_use.py +1 -1
  14. hyperbrowser/client/managers/sync_manager/agents/gemini_computer_use.py +71 -0
  15. hyperbrowser/client/managers/sync_manager/computer_action.py +165 -0
  16. hyperbrowser/client/managers/sync_manager/crawl.py +1 -0
  17. hyperbrowser/client/managers/sync_manager/scrape.py +1 -0
  18. hyperbrowser/client/managers/sync_manager/session.py +40 -1
  19. hyperbrowser/client/managers/sync_manager/team.py +12 -0
  20. hyperbrowser/client/sync.py +4 -0
  21. hyperbrowser/config.py +2 -2
  22. hyperbrowser/models/__init__.py +137 -0
  23. hyperbrowser/models/agents/browser_use.py +113 -3
  24. hyperbrowser/models/agents/claude_computer_use.py +38 -0
  25. hyperbrowser/models/agents/cua.py +32 -0
  26. hyperbrowser/models/agents/gemini_computer_use.py +135 -0
  27. hyperbrowser/models/agents/hyper_agent.py +31 -0
  28. hyperbrowser/models/computer_action.py +208 -0
  29. hyperbrowser/models/consts.py +27 -0
  30. hyperbrowser/models/extract.py +11 -0
  31. hyperbrowser/models/scrape.py +18 -0
  32. hyperbrowser/models/session.py +148 -11
  33. hyperbrowser/models/team.py +15 -0
  34. {hyperbrowser-0.44.0.dist-info → hyperbrowser-0.72.0.dist-info}/METADATA +8 -2
  35. hyperbrowser-0.72.0.dist-info/RECORD +60 -0
  36. {hyperbrowser-0.44.0.dist-info → hyperbrowser-0.72.0.dist-info}/WHEEL +1 -1
  37. {hyperbrowser-0.44.0.dist-info → hyperbrowser-0.72.0.dist-info/licenses}/LICENSE +1 -1
  38. hyperbrowser-0.44.0.dist-info/RECORD +0 -51
@@ -0,0 +1,135 @@
1
+ from typing import Any, Literal, Optional
2
+
3
+ from pydantic import BaseModel, ConfigDict, Field
4
+
5
+ from ..session import CreateSessionParams
6
+ from ..consts import GeminiComputerUseLlm
7
+
8
+ GeminiComputerUseTaskStatus = Literal[
9
+ "pending", "running", "completed", "failed", "stopped"
10
+ ]
11
+
12
+
13
+ class GeminiComputerUseApiKeys(BaseModel):
14
+ """
15
+ API keys for the Gemini Computer Use task.
16
+ """
17
+
18
+ model_config = ConfigDict(
19
+ populate_by_alias=True,
20
+ )
21
+
22
+ google: Optional[str] = Field(default=None, serialization_alias="google")
23
+
24
+
25
+ class StartGeminiComputerUseTaskParams(BaseModel):
26
+ """
27
+ Parameters for creating a new Gemini Computer Use task.
28
+ """
29
+
30
+ model_config = ConfigDict(
31
+ populate_by_alias=True,
32
+ )
33
+
34
+ task: str
35
+ llm: Optional[GeminiComputerUseLlm] = Field(default=None, serialization_alias="llm")
36
+ session_id: Optional[str] = Field(default=None, serialization_alias="sessionId")
37
+ max_failures: Optional[int] = Field(default=None, serialization_alias="maxFailures")
38
+ max_steps: Optional[int] = Field(default=None, serialization_alias="maxSteps")
39
+ keep_browser_open: Optional[bool] = Field(
40
+ default=None, serialization_alias="keepBrowserOpen"
41
+ )
42
+ session_options: Optional[CreateSessionParams] = Field(
43
+ default=None, serialization_alias="sessionOptions"
44
+ )
45
+ use_custom_api_keys: Optional[bool] = Field(
46
+ default=None, serialization_alias="useCustomApiKeys"
47
+ )
48
+ use_computer_action: Optional[bool] = Field(
49
+ default=None, serialization_alias="useComputerAction"
50
+ )
51
+ api_keys: Optional[GeminiComputerUseApiKeys] = Field(
52
+ default=None, serialization_alias="apiKeys"
53
+ )
54
+
55
+
56
+ class StartGeminiComputerUseTaskResponse(BaseModel):
57
+ """
58
+ Response from starting a Gemini Computer Use task.
59
+ """
60
+
61
+ model_config = ConfigDict(
62
+ populate_by_alias=True,
63
+ )
64
+
65
+ job_id: str = Field(alias="jobId")
66
+ live_url: Optional[str] = Field(default=None, alias="liveUrl")
67
+
68
+
69
+ class GeminiComputerUseTaskStatusResponse(BaseModel):
70
+ """
71
+ Response from getting a Gemini Computer Use task status.
72
+ """
73
+
74
+ model_config = ConfigDict(
75
+ populate_by_alias=True,
76
+ )
77
+
78
+ status: GeminiComputerUseTaskStatus
79
+
80
+
81
+ class GeminiComputerUseStepResponse(BaseModel):
82
+ """
83
+ Response from a single Gemini Computer Use step.
84
+ """
85
+
86
+ model_config = ConfigDict(
87
+ populate_by_alias=True,
88
+ )
89
+
90
+ candidates: Optional[list[Any]] = Field(
91
+ default=None, serialization_alias="candidates"
92
+ )
93
+ model_version: Optional[str] = Field(
94
+ default=None, serialization_alias="modelVersion"
95
+ )
96
+
97
+
98
+ class GeminiComputerUseTaskData(BaseModel):
99
+ model_config = ConfigDict(
100
+ populate_by_alias=True,
101
+ )
102
+
103
+ steps: list[GeminiComputerUseStepResponse]
104
+ final_result: Optional[str] = Field(default=None, alias="finalResult")
105
+
106
+
107
+ class GeminiComputerUseTaskMetadata(BaseModel):
108
+ model_config = ConfigDict(
109
+ populate_by_alias=True,
110
+ )
111
+
112
+ input_tokens: Optional[int] = Field(default=None, alias="inputTokens")
113
+ output_tokens: Optional[int] = Field(default=None, alias="outputTokens")
114
+ num_task_steps_completed: Optional[int] = Field(
115
+ default=None, alias="numTaskStepsCompleted"
116
+ )
117
+
118
+
119
+ class GeminiComputerUseTaskResponse(BaseModel):
120
+ """
121
+ Response from a Gemini Computer Use task.
122
+ """
123
+
124
+ model_config = ConfigDict(
125
+ populate_by_alias=True,
126
+ )
127
+
128
+ job_id: str = Field(alias="jobId")
129
+ status: GeminiComputerUseTaskStatus
130
+ metadata: Optional[GeminiComputerUseTaskMetadata] = Field(
131
+ default=None, alias="metadata"
132
+ )
133
+ data: Optional[GeminiComputerUseTaskData] = Field(default=None, alias="data")
134
+ error: Optional[str] = Field(default=None, alias="error")
135
+ live_url: Optional[str] = Field(default=None, alias="liveUrl")
@@ -8,6 +8,20 @@ from ..session import CreateSessionParams
8
8
  HyperAgentTaskStatus = Literal["pending", "running", "completed", "failed", "stopped"]
9
9
 
10
10
 
11
+ class HyperAgentApiKeys(BaseModel):
12
+ """
13
+ API keys for the HyperAgent task.
14
+ """
15
+
16
+ model_config = ConfigDict(
17
+ populate_by_alias=True,
18
+ )
19
+
20
+ openai: Optional[str] = Field(default=None, serialization_alias="openai")
21
+ anthropic: Optional[str] = Field(default=None, serialization_alias="anthropic")
22
+ google: Optional[str] = Field(default=None, serialization_alias="google")
23
+
24
+
11
25
  class StartHyperAgentTaskParams(BaseModel):
12
26
  """
13
27
  Parameters for creating a new HyperAgent task.
@@ -27,6 +41,12 @@ class StartHyperAgentTaskParams(BaseModel):
27
41
  session_options: Optional[CreateSessionParams] = Field(
28
42
  default=None, serialization_alias="sessionOptions"
29
43
  )
44
+ use_custom_api_keys: Optional[bool] = Field(
45
+ default=None, serialization_alias="useCustomApiKeys"
46
+ )
47
+ api_keys: Optional[HyperAgentApiKeys] = Field(
48
+ default=None, serialization_alias="apiKeys"
49
+ )
30
50
 
31
51
 
32
52
  class StartHyperAgentTaskResponse(BaseModel):
@@ -106,6 +126,16 @@ class HyperAgentTaskData(BaseModel):
106
126
  final_result: Optional[str] = Field(default=None, alias="finalResult")
107
127
 
108
128
 
129
+ class HyperAgentTaskMetadata(BaseModel):
130
+ model_config = ConfigDict(
131
+ populate_by_alias=True,
132
+ )
133
+
134
+ num_task_steps_completed: Optional[int] = Field(
135
+ default=None, alias="numTaskStepsCompleted"
136
+ )
137
+
138
+
109
139
  class HyperAgentTaskResponse(BaseModel):
110
140
  """
111
141
  Response from a HyperAgent task.
@@ -117,6 +147,7 @@ class HyperAgentTaskResponse(BaseModel):
117
147
 
118
148
  job_id: str = Field(alias="jobId")
119
149
  status: HyperAgentTaskStatus
150
+ metadata: Optional[HyperAgentTaskMetadata] = Field(default=None, alias="metadata")
120
151
  data: Optional[HyperAgentTaskData] = Field(default=None, alias="data")
121
152
  error: Optional[str] = Field(default=None, alias="error")
122
153
  live_url: Optional[str] = Field(default=None, alias="liveUrl")
@@ -0,0 +1,208 @@
1
+ from enum import Enum
2
+ from typing import List, Literal, Optional, Union
3
+ from pydantic import BaseModel, ConfigDict, Field
4
+
5
+
6
+ class ComputerAction(str, Enum):
7
+ """Computer action types."""
8
+
9
+ CLICK = "click"
10
+ DRAG = "drag"
11
+ HOLD_KEY = "hold_key"
12
+ MOUSE_DOWN = "mouse_down"
13
+ MOUSE_UP = "mouse_up"
14
+ MOVE_MOUSE = "move_mouse"
15
+ PRESS_KEYS = "press_keys"
16
+ SCREENSHOT = "screenshot"
17
+ SCROLL = "scroll"
18
+ TYPE_TEXT = "type_text"
19
+ GET_CLIPBOARD_TEXT = "get_clipboard_text"
20
+
21
+
22
+ ComputerActionMouseButton = Literal[
23
+ "left", "right", "middle", "back", "forward", "wheel"
24
+ ]
25
+
26
+
27
+ class Coordinate(BaseModel):
28
+ """Coordinate model for drag actions."""
29
+
30
+ x: int
31
+ y: int
32
+
33
+
34
+ class ClickActionParams(BaseModel):
35
+ """Parameters for click action."""
36
+
37
+ model_config = ConfigDict(use_enum_values=True)
38
+
39
+ action: Literal[ComputerAction.CLICK] = ComputerAction.CLICK
40
+ x: Optional[int] = Field(default=None)
41
+ y: Optional[int] = Field(default=None)
42
+ button: ComputerActionMouseButton = Field(default="left")
43
+ num_clicks: int = Field(serialization_alias="numClicks", default=1)
44
+ return_screenshot: bool = Field(
45
+ serialization_alias="returnScreenshot", default=False
46
+ )
47
+
48
+
49
+ class DragActionParams(BaseModel):
50
+ """Parameters for drag action."""
51
+
52
+ model_config = ConfigDict(use_enum_values=True)
53
+
54
+ action: Literal[ComputerAction.DRAG] = ComputerAction.DRAG
55
+ path: List[Coordinate]
56
+ return_screenshot: bool = Field(
57
+ serialization_alias="returnScreenshot", default=False
58
+ )
59
+
60
+
61
+ class PressKeysActionParams(BaseModel):
62
+ """Parameters for press keys action."""
63
+
64
+ model_config = ConfigDict(use_enum_values=True)
65
+
66
+ action: Literal[ComputerAction.PRESS_KEYS] = ComputerAction.PRESS_KEYS
67
+ keys: List[str]
68
+ return_screenshot: bool = Field(
69
+ serialization_alias="returnScreenshot", default=False
70
+ )
71
+
72
+
73
+ class HoldKeyActionParams(BaseModel):
74
+ """Parameters for hold key action."""
75
+
76
+ model_config = ConfigDict(use_enum_values=True)
77
+
78
+ action: Literal[ComputerAction.HOLD_KEY] = ComputerAction.HOLD_KEY
79
+ key: str
80
+ duration: int
81
+ return_screenshot: bool = Field(
82
+ serialization_alias="returnScreenshot", default=False
83
+ )
84
+
85
+
86
+ class MouseDownActionParams(BaseModel):
87
+ """Parameters for mouse down action."""
88
+
89
+ model_config = ConfigDict(use_enum_values=True)
90
+
91
+ action: Literal[ComputerAction.MOUSE_DOWN] = ComputerAction.MOUSE_DOWN
92
+ button: ComputerActionMouseButton = Field(default="left")
93
+ return_screenshot: bool = Field(
94
+ serialization_alias="returnScreenshot", default=False
95
+ )
96
+
97
+
98
+ class MouseUpActionParams(BaseModel):
99
+ """Parameters for mouse up action."""
100
+
101
+ model_config = ConfigDict(use_enum_values=True)
102
+
103
+ action: Literal[ComputerAction.MOUSE_UP] = ComputerAction.MOUSE_UP
104
+ button: ComputerActionMouseButton = Field(default="left")
105
+ return_screenshot: bool = Field(
106
+ serialization_alias="returnScreenshot", default=False
107
+ )
108
+
109
+
110
+ class MoveMouseActionParams(BaseModel):
111
+ """Parameters for move mouse action."""
112
+
113
+ model_config = ConfigDict(use_enum_values=True)
114
+
115
+ action: Literal[ComputerAction.MOVE_MOUSE] = ComputerAction.MOVE_MOUSE
116
+ x: int = Field(ge=0)
117
+ y: int = Field(ge=0)
118
+ return_screenshot: bool = Field(
119
+ serialization_alias="returnScreenshot", default=False
120
+ )
121
+
122
+
123
+ class ScreenshotActionParams(BaseModel):
124
+ """Parameters for screenshot action."""
125
+
126
+ model_config = ConfigDict(use_enum_values=True)
127
+
128
+ action: Literal[ComputerAction.SCREENSHOT] = ComputerAction.SCREENSHOT
129
+
130
+
131
+ class ScrollActionParams(BaseModel):
132
+ """Parameters for scroll action."""
133
+
134
+ model_config = ConfigDict(use_enum_values=True)
135
+
136
+ action: Literal[ComputerAction.SCROLL] = ComputerAction.SCROLL
137
+ x: int
138
+ y: int
139
+ scroll_x: int = Field(serialization_alias="scrollX")
140
+ scroll_y: int = Field(serialization_alias="scrollY")
141
+ return_screenshot: bool = Field(
142
+ serialization_alias="returnScreenshot", default=False
143
+ )
144
+
145
+
146
+ class TypeTextActionParams(BaseModel):
147
+ """Parameters for type text action."""
148
+
149
+ model_config = ConfigDict(use_enum_values=True)
150
+
151
+ action: Literal[ComputerAction.TYPE_TEXT] = ComputerAction.TYPE_TEXT
152
+ text: str
153
+ return_screenshot: bool = Field(
154
+ serialization_alias="returnScreenshot", default=False
155
+ )
156
+
157
+
158
+ class GetClipboardTextActionParams(BaseModel):
159
+ """Parameters for get clipboard text action."""
160
+
161
+ model_config = ConfigDict(use_enum_values=True)
162
+
163
+ action: Literal[ComputerAction.GET_CLIPBOARD_TEXT] = (
164
+ ComputerAction.GET_CLIPBOARD_TEXT
165
+ )
166
+ return_screenshot: bool = Field(
167
+ serialization_alias="returnScreenshot", default=False
168
+ )
169
+
170
+
171
+ ComputerActionParams = Union[
172
+ ClickActionParams,
173
+ DragActionParams,
174
+ PressKeysActionParams,
175
+ MoveMouseActionParams,
176
+ ScreenshotActionParams,
177
+ ScrollActionParams,
178
+ TypeTextActionParams,
179
+ HoldKeyActionParams,
180
+ MouseDownActionParams,
181
+ MouseUpActionParams,
182
+ GetClipboardTextActionParams,
183
+ ]
184
+
185
+
186
+ class ComputerActionResponseDataClipboardText(BaseModel):
187
+ """Data for get clipboard text action."""
188
+
189
+ model_config = ConfigDict(populate_by_alias=True)
190
+
191
+ clipboard_text: Optional[str] = Field(default=None, alias="clipboardText")
192
+
193
+
194
+ ComputerActionResponseData = Union[ComputerActionResponseDataClipboardText]
195
+
196
+
197
+ class ComputerActionResponse(BaseModel):
198
+ """Response from computer action API."""
199
+
200
+ model_config = ConfigDict(
201
+ populate_by_alias=True,
202
+ )
203
+
204
+ success: bool
205
+ screenshot: Optional[str] = None
206
+ data: Optional[ComputerActionResponseData] = None
207
+ error: Optional[str] = None
208
+ message: Optional[str] = None
@@ -10,16 +10,28 @@ RecordingStatus = Literal[
10
10
  DownloadsStatus = Literal[
11
11
  "not_enabled", "pending", "in_progress", "completed", "failed"
12
12
  ]
13
+ SessionEventLogType = Literal[
14
+ "captcha_detected", "captcha_solved", "captcha_error", "file_downloaded"
15
+ ]
13
16
 
14
17
  POLLING_ATTEMPTS = 5
15
18
 
19
+ BrowserUseVersion = Literal["0.1.40", "0.7.10", "latest"]
20
+
16
21
  BrowserUseLlm = Literal[
17
22
  "gpt-4o",
18
23
  "gpt-4o-mini",
24
+ "gpt-4.1",
25
+ "gpt-4.1-mini",
26
+ "gpt-5",
27
+ "gpt-5-mini",
28
+ "claude-sonnet-4-5",
29
+ "claude-sonnet-4-20250514",
19
30
  "claude-3-7-sonnet-20250219",
20
31
  "claude-3-5-sonnet-20241022",
21
32
  "claude-3-5-haiku-20241022",
22
33
  "gemini-2.0-flash",
34
+ "gemini-2.5-flash",
23
35
  ]
24
36
  HyperAgentLlm = Literal[
25
37
  "gpt-4o",
@@ -28,6 +40,21 @@ HyperAgentLlm = Literal[
28
40
  "gpt-4.1-mini",
29
41
  "gpt-4.1-nano",
30
42
  ]
43
+ ClaudeComputerUseLlm = Literal[
44
+ "claude-haiku-4-5-20251001",
45
+ "claude-sonnet-4-5",
46
+ "claude-sonnet-4-20250514",
47
+ "claude-3-7-sonnet-20250219",
48
+ ]
49
+ GeminiComputerUseLlm = Literal["gemini-2.5-computer-use-preview-10-2025",]
50
+ SessionRegion = Literal[
51
+ "us-central",
52
+ "asia-south",
53
+ "us-dev",
54
+ "europe-west",
55
+ "us-west",
56
+ "us-east",
57
+ ]
31
58
 
32
59
  Country = Literal[
33
60
  "AD",
@@ -55,6 +55,16 @@ class ExtractJobStatusResponse(BaseModel):
55
55
  status: ExtractJobStatus
56
56
 
57
57
 
58
+ class ExtractJobMetadata(BaseModel):
59
+ model_config = ConfigDict(
60
+ populate_by_alias=True,
61
+ )
62
+
63
+ input_tokens: Optional[int] = Field(default=None, alias="inputTokens")
64
+ output_tokens: Optional[int] = Field(default=None, alias="outputTokens")
65
+ num_pages_scraped: Optional[int] = Field(default=None, alias="numPagesScraped")
66
+
67
+
58
68
  class ExtractJobResponse(BaseModel):
59
69
  """
60
70
  Response from a extract job.
@@ -67,4 +77,5 @@ class ExtractJobResponse(BaseModel):
67
77
  job_id: str = Field(alias="jobId")
68
78
  status: ExtractJobStatus
69
79
  error: Optional[str] = None
80
+ metadata: Optional[ExtractJobMetadata] = None
70
81
  data: Optional[dict] = None
@@ -21,6 +21,21 @@ class ScreenshotOptions(BaseModel):
21
21
  format: Optional[ScrapeScreenshotFormat] = Field(
22
22
  default=None, serialization_alias="format"
23
23
  )
24
+ crop_to_content: Optional[bool] = Field(
25
+ default=None, serialization_alias="cropToContent"
26
+ )
27
+ crop_to_content_max_height: Optional[int] = Field(
28
+ default=None, serialization_alias="cropToContentMaxHeight"
29
+ )
30
+
31
+
32
+ class StorageStateOptions(BaseModel):
33
+ local_storage: Optional[dict[str, str]] = Field(
34
+ default=None, serialization_alias="localStorage"
35
+ )
36
+ session_storage: Optional[dict[str, str]] = Field(
37
+ default=None, serialization_alias="sessionStorage"
38
+ )
24
39
 
25
40
 
26
41
  class ScrapeOptions(BaseModel):
@@ -46,6 +61,9 @@ class ScrapeOptions(BaseModel):
46
61
  screenshot_options: Optional[ScreenshotOptions] = Field(
47
62
  default=None, serialization_alias="screenshotOptions"
48
63
  )
64
+ storage_state: Optional[StorageStateOptions] = Field(
65
+ default=None, serialization_alias="storageState"
66
+ )
49
67
 
50
68
 
51
69
  class StartScrapeJobParams(BaseModel):