hyperbrowser 0.36.0__tar.gz → 0.38.0__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.

Potentially problematic release.


This version of hyperbrowser might be problematic. Click here for more details.

Files changed (50) hide show
  1. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/PKG-INFO +1 -1
  2. hyperbrowser-0.38.0/hyperbrowser/client/managers/async_manager/agents/__init__.py +10 -0
  3. hyperbrowser-0.38.0/hyperbrowser/client/managers/async_manager/agents/claude_computer_use.py +71 -0
  4. hyperbrowser-0.38.0/hyperbrowser/client/managers/async_manager/agents/cua.py +67 -0
  5. hyperbrowser-0.38.0/hyperbrowser/client/managers/sync_manager/agents/__init__.py +10 -0
  6. hyperbrowser-0.38.0/hyperbrowser/client/managers/sync_manager/agents/claude_computer_use.py +71 -0
  7. hyperbrowser-0.38.0/hyperbrowser/client/managers/sync_manager/agents/cua.py +67 -0
  8. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/models/__init__.py +26 -0
  9. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/models/agents/browser_use.py +0 -1
  10. hyperbrowser-0.38.0/hyperbrowser/models/agents/claude_computer_use.py +97 -0
  11. hyperbrowser-0.38.0/hyperbrowser/models/agents/cua.py +131 -0
  12. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/pyproject.toml +1 -1
  13. hyperbrowser-0.36.0/hyperbrowser/client/managers/async_manager/agents/__init__.py +0 -6
  14. hyperbrowser-0.36.0/hyperbrowser/client/managers/sync_manager/agents/__init__.py +0 -6
  15. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/LICENSE +0 -0
  16. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/README.md +0 -0
  17. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/__init__.py +0 -0
  18. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/client/async_client.py +0 -0
  19. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/client/base.py +0 -0
  20. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/client/managers/async_manager/agents/browser_use.py +0 -0
  21. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/client/managers/async_manager/crawl.py +0 -0
  22. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/client/managers/async_manager/extension.py +0 -0
  23. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/client/managers/async_manager/extract.py +0 -0
  24. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/client/managers/async_manager/profile.py +0 -0
  25. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/client/managers/async_manager/scrape.py +0 -0
  26. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/client/managers/async_manager/session.py +0 -0
  27. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/client/managers/sync_manager/agents/browser_use.py +0 -0
  28. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/client/managers/sync_manager/crawl.py +0 -0
  29. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/client/managers/sync_manager/extension.py +0 -0
  30. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/client/managers/sync_manager/extract.py +0 -0
  31. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/client/managers/sync_manager/profile.py +0 -0
  32. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/client/managers/sync_manager/scrape.py +0 -0
  33. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/client/managers/sync_manager/session.py +0 -0
  34. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/client/sync.py +0 -0
  35. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/config.py +0 -0
  36. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/exceptions.py +0 -0
  37. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/models/consts.py +0 -0
  38. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/models/crawl.py +0 -0
  39. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/models/extension.py +0 -0
  40. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/models/extract.py +0 -0
  41. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/models/profile.py +0 -0
  42. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/models/scrape.py +0 -0
  43. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/models/session.py +0 -0
  44. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/tools/__init__.py +0 -0
  45. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/tools/anthropic.py +0 -0
  46. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/tools/openai.py +0 -0
  47. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/tools/schema.py +0 -0
  48. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/transport/async_transport.py +0 -0
  49. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/transport/base.py +0 -0
  50. {hyperbrowser-0.36.0 → hyperbrowser-0.38.0}/hyperbrowser/transport/sync.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: hyperbrowser
3
- Version: 0.36.0
3
+ Version: 0.38.0
4
4
  Summary: Python SDK for hyperbrowser
5
5
  License: MIT
6
6
  Author: Nikhil Shahi
@@ -0,0 +1,10 @@
1
+ from .browser_use import BrowserUseManager
2
+ from .cua import CuaManager
3
+ from .claude_computer_use import ClaudeComputerUseManager
4
+
5
+
6
+ class Agents:
7
+ def __init__(self, client):
8
+ self.browser_use = BrowserUseManager(client)
9
+ self.cua = CuaManager(client)
10
+ self.claude_computer_use = ClaudeComputerUseManager(client)
@@ -0,0 +1,71 @@
1
+ import asyncio
2
+
3
+ from hyperbrowser.exceptions import HyperbrowserError
4
+
5
+ from .....models import (
6
+ POLLING_ATTEMPTS,
7
+ BasicResponse,
8
+ ClaudeComputerUseTaskResponse,
9
+ ClaudeComputerUseTaskStatusResponse,
10
+ StartClaudeComputerUseTaskParams,
11
+ StartClaudeComputerUseTaskResponse,
12
+ )
13
+
14
+
15
+ class ClaudeComputerUseManager:
16
+ def __init__(self, client):
17
+ self._client = client
18
+
19
+ async def start(
20
+ self, params: StartClaudeComputerUseTaskParams
21
+ ) -> StartClaudeComputerUseTaskResponse:
22
+ response = await self._client.transport.post(
23
+ self._client._build_url("/task/claude-computer-use"),
24
+ data=params.model_dump(exclude_none=True, by_alias=True),
25
+ )
26
+ return StartClaudeComputerUseTaskResponse(**response.data)
27
+
28
+ async def get(self, job_id: str) -> ClaudeComputerUseTaskResponse:
29
+ response = await self._client.transport.get(
30
+ self._client._build_url(f"/task/claude-computer-use/{job_id}")
31
+ )
32
+ return ClaudeComputerUseTaskResponse(**response.data)
33
+
34
+ async def get_status(self, job_id: str) -> ClaudeComputerUseTaskStatusResponse:
35
+ response = await self._client.transport.get(
36
+ self._client._build_url(f"/task/claude-computer-use/{job_id}/status")
37
+ )
38
+ return ClaudeComputerUseTaskStatusResponse(**response.data)
39
+
40
+ async def stop(self, job_id: str) -> BasicResponse:
41
+ response = await self._client.transport.put(
42
+ self._client._build_url(f"/task/claude-computer-use/{job_id}/stop")
43
+ )
44
+ return BasicResponse(**response.data)
45
+
46
+ async def start_and_wait(
47
+ self, params: StartClaudeComputerUseTaskParams
48
+ ) -> ClaudeComputerUseTaskResponse:
49
+ job_start_resp = await self.start(params)
50
+ job_id = job_start_resp.job_id
51
+ if not job_id:
52
+ raise HyperbrowserError("Failed to start Claude Computer Use task job")
53
+
54
+ failures = 0
55
+ while True:
56
+ try:
57
+ job_response = await self.get_status(job_id)
58
+ if (
59
+ job_response.status == "completed"
60
+ or job_response.status == "failed"
61
+ or job_response.status == "stopped"
62
+ ):
63
+ return await self.get(job_id)
64
+ failures = 0
65
+ except Exception as e:
66
+ failures += 1
67
+ if failures >= POLLING_ATTEMPTS:
68
+ raise HyperbrowserError(
69
+ f"Failed to poll Claude Computer Use task job {job_id} after {POLLING_ATTEMPTS} attempts: {e}"
70
+ )
71
+ await asyncio.sleep(2)
@@ -0,0 +1,67 @@
1
+ import asyncio
2
+
3
+ from hyperbrowser.exceptions import HyperbrowserError
4
+
5
+ from .....models import (
6
+ POLLING_ATTEMPTS,
7
+ BasicResponse,
8
+ CuaTaskResponse,
9
+ CuaTaskStatusResponse,
10
+ StartCuaTaskParams,
11
+ StartCuaTaskResponse,
12
+ )
13
+
14
+
15
+ class CuaManager:
16
+ def __init__(self, client):
17
+ self._client = client
18
+
19
+ async def start(self, params: StartCuaTaskParams) -> StartCuaTaskResponse:
20
+ response = await self._client.transport.post(
21
+ self._client._build_url("/task/cua"),
22
+ data=params.model_dump(exclude_none=True, by_alias=True),
23
+ )
24
+ return StartCuaTaskResponse(**response.data)
25
+
26
+ async def get(self, job_id: str) -> CuaTaskResponse:
27
+ response = await self._client.transport.get(
28
+ self._client._build_url(f"/task/cua/{job_id}")
29
+ )
30
+ return CuaTaskResponse(**response.data)
31
+
32
+ async def get_status(self, job_id: str) -> CuaTaskStatusResponse:
33
+ response = await self._client.transport.get(
34
+ self._client._build_url(f"/task/cua/{job_id}/status")
35
+ )
36
+ return CuaTaskStatusResponse(**response.data)
37
+
38
+ async def stop(self, job_id: str) -> BasicResponse:
39
+ response = await self._client.transport.put(
40
+ self._client._build_url(f"/task/cua/{job_id}/stop")
41
+ )
42
+ return BasicResponse(**response.data)
43
+
44
+ async def start_and_wait(self, params: StartCuaTaskParams) -> CuaTaskResponse:
45
+ job_start_resp = await self.start(params)
46
+ job_id = job_start_resp.job_id
47
+ if not job_id:
48
+ raise HyperbrowserError("Failed to start CUA task job")
49
+
50
+ failures = 0
51
+ while True:
52
+ try:
53
+ job_response = await self.get_status(job_id)
54
+ if (
55
+ job_response.status == "completed"
56
+ or job_response.status == "failed"
57
+ or job_response.status == "stopped"
58
+ ):
59
+ return await self.get(job_id)
60
+ failures = 0
61
+ except Exception as e:
62
+ failures += 1
63
+ if failures >= POLLING_ATTEMPTS:
64
+ raise HyperbrowserError(
65
+ f"Failed to poll CUA task job {job_id} after {POLLING_ATTEMPTS} attempts: {e}"
66
+ )
67
+ await asyncio.sleep(2)
@@ -0,0 +1,10 @@
1
+ from .browser_use import BrowserUseManager
2
+ from .cua import CuaManager
3
+ from .claude_computer_use import ClaudeComputerUseManager
4
+
5
+
6
+ class Agents:
7
+ def __init__(self, client):
8
+ self.browser_use = BrowserUseManager(client)
9
+ self.cua = CuaManager(client)
10
+ self.claude_computer_use = ClaudeComputerUseManager(client)
@@ -0,0 +1,71 @@
1
+ import time
2
+
3
+ from hyperbrowser.exceptions import HyperbrowserError
4
+
5
+ from .....models import (
6
+ POLLING_ATTEMPTS,
7
+ BasicResponse,
8
+ ClaudeComputerUseTaskResponse,
9
+ ClaudeComputerUseTaskStatusResponse,
10
+ StartClaudeComputerUseTaskParams,
11
+ StartClaudeComputerUseTaskResponse,
12
+ )
13
+
14
+
15
+ class ClaudeComputerUseManager:
16
+ def __init__(self, client):
17
+ self._client = client
18
+
19
+ def start(
20
+ self, params: StartClaudeComputerUseTaskParams
21
+ ) -> StartClaudeComputerUseTaskResponse:
22
+ response = self._client.transport.post(
23
+ self._client._build_url("/task/claude-computer-use"),
24
+ data=params.model_dump(exclude_none=True, by_alias=True),
25
+ )
26
+ return StartClaudeComputerUseTaskResponse(**response.data)
27
+
28
+ def get(self, job_id: str) -> ClaudeComputerUseTaskResponse:
29
+ response = self._client.transport.get(
30
+ self._client._build_url(f"/task/claude-computer-use/{job_id}")
31
+ )
32
+ return ClaudeComputerUseTaskResponse(**response.data)
33
+
34
+ def get_status(self, job_id: str) -> ClaudeComputerUseTaskStatusResponse:
35
+ response = self._client.transport.get(
36
+ self._client._build_url(f"/task/claude-computer-use/{job_id}/status")
37
+ )
38
+ return ClaudeComputerUseTaskStatusResponse(**response.data)
39
+
40
+ def stop(self, job_id: str) -> BasicResponse:
41
+ response = self._client.transport.put(
42
+ self._client._build_url(f"/task/claude-computer-use/{job_id}/stop")
43
+ )
44
+ return BasicResponse(**response.data)
45
+
46
+ def start_and_wait(
47
+ self, params: StartClaudeComputerUseTaskParams
48
+ ) -> ClaudeComputerUseTaskResponse:
49
+ job_start_resp = self.start(params)
50
+ job_id = job_start_resp.job_id
51
+ if not job_id:
52
+ raise HyperbrowserError("Failed to start CUA task job")
53
+
54
+ failures = 0
55
+ while True:
56
+ try:
57
+ job_response = self.get_status(job_id)
58
+ if (
59
+ job_response.status == "completed"
60
+ or job_response.status == "failed"
61
+ or job_response.status == "stopped"
62
+ ):
63
+ return self.get(job_id)
64
+ failures = 0
65
+ except Exception as e:
66
+ failures += 1
67
+ if failures >= POLLING_ATTEMPTS:
68
+ raise HyperbrowserError(
69
+ f"Failed to poll Claude Computer Use task job {job_id} after {POLLING_ATTEMPTS} attempts: {e}"
70
+ )
71
+ time.sleep(2)
@@ -0,0 +1,67 @@
1
+ import time
2
+
3
+ from hyperbrowser.exceptions import HyperbrowserError
4
+
5
+ from .....models import (
6
+ POLLING_ATTEMPTS,
7
+ BasicResponse,
8
+ CuaTaskResponse,
9
+ CuaTaskStatusResponse,
10
+ StartCuaTaskParams,
11
+ StartCuaTaskResponse,
12
+ )
13
+
14
+
15
+ class CuaManager:
16
+ def __init__(self, client):
17
+ self._client = client
18
+
19
+ def start(self, params: StartCuaTaskParams) -> StartCuaTaskResponse:
20
+ response = self._client.transport.post(
21
+ self._client._build_url("/task/cua"),
22
+ data=params.model_dump(exclude_none=True, by_alias=True),
23
+ )
24
+ return StartCuaTaskResponse(**response.data)
25
+
26
+ def get(self, job_id: str) -> CuaTaskResponse:
27
+ response = self._client.transport.get(
28
+ self._client._build_url(f"/task/cua/{job_id}")
29
+ )
30
+ return CuaTaskResponse(**response.data)
31
+
32
+ def get_status(self, job_id: str) -> CuaTaskStatusResponse:
33
+ response = self._client.transport.get(
34
+ self._client._build_url(f"/task/cua/{job_id}/status")
35
+ )
36
+ return CuaTaskStatusResponse(**response.data)
37
+
38
+ def stop(self, job_id: str) -> BasicResponse:
39
+ response = self._client.transport.put(
40
+ self._client._build_url(f"/task/cua/{job_id}/stop")
41
+ )
42
+ return BasicResponse(**response.data)
43
+
44
+ def start_and_wait(self, params: StartCuaTaskParams) -> CuaTaskResponse:
45
+ job_start_resp = self.start(params)
46
+ job_id = job_start_resp.job_id
47
+ if not job_id:
48
+ raise HyperbrowserError("Failed to start CUA task job")
49
+
50
+ failures = 0
51
+ while True:
52
+ try:
53
+ job_response = self.get_status(job_id)
54
+ if (
55
+ job_response.status == "completed"
56
+ or job_response.status == "failed"
57
+ or job_response.status == "stopped"
58
+ ):
59
+ return self.get(job_id)
60
+ failures = 0
61
+ except Exception as e:
62
+ failures += 1
63
+ if failures >= POLLING_ATTEMPTS:
64
+ raise HyperbrowserError(
65
+ f"Failed to poll CUA task job {job_id} after {POLLING_ATTEMPTS} attempts: {e}"
66
+ )
67
+ time.sleep(2)
@@ -5,6 +5,20 @@ from .agents.browser_use import (
5
5
  StartBrowserUseTaskParams,
6
6
  StartBrowserUseTaskResponse,
7
7
  )
8
+ from .agents.claude_computer_use import (
9
+ ClaudeComputerUseTaskData,
10
+ ClaudeComputerUseTaskResponse,
11
+ ClaudeComputerUseTaskStatusResponse,
12
+ StartClaudeComputerUseTaskParams,
13
+ StartClaudeComputerUseTaskResponse,
14
+ )
15
+ from .agents.cua import (
16
+ CuaTaskData,
17
+ CuaTaskResponse,
18
+ CuaTaskStatusResponse,
19
+ StartCuaTaskParams,
20
+ StartCuaTaskResponse,
21
+ )
8
22
  from .consts import (
9
23
  ISO639_1,
10
24
  POLLING_ATTEMPTS,
@@ -97,6 +111,18 @@ __all__ = [
97
111
  "BrowserUseTaskStatusResponse",
98
112
  "StartBrowserUseTaskParams",
99
113
  "StartBrowserUseTaskResponse",
114
+ "ClaudeComputerUseTaskStatus",
115
+ "ClaudeComputerUseTaskData",
116
+ "ClaudeComputerUseTaskResponse",
117
+ "ClaudeComputerUseTaskStatusResponse",
118
+ "StartClaudeComputerUseTaskParams",
119
+ "StartClaudeComputerUseTaskResponse",
120
+ "CuaTaskStatus",
121
+ "CuaTaskData",
122
+ "CuaTaskResponse",
123
+ "CuaTaskStatusResponse",
124
+ "StartCuaTaskParams",
125
+ "StartCuaTaskResponse",
100
126
  # crawl
101
127
  "CrawledPage",
102
128
  "CrawlJobResponse",
@@ -183,4 +183,3 @@ class BrowserUseTaskResponse(BaseModel):
183
183
  data: Optional[BrowserUseTaskData] = Field(default=None, alias="data")
184
184
  error: Optional[str] = Field(default=None, alias="error")
185
185
  live_url: Optional[str] = Field(default=None, alias="liveUrl")
186
- live_url: Optional[str] = Field(default=None, alias="liveUrl")
@@ -0,0 +1,97 @@
1
+ from typing import Any, Literal, Optional
2
+
3
+ from pydantic import BaseModel, ConfigDict, Field
4
+
5
+ from ..session import CreateSessionParams
6
+
7
+ ClaudeComputerUseTaskStatus = Literal[
8
+ "pending", "running", "completed", "failed", "stopped"
9
+ ]
10
+
11
+
12
+ class StartClaudeComputerUseTaskParams(BaseModel):
13
+ """
14
+ Parameters for creating a new Claude Computer Use task.
15
+ """
16
+
17
+ model_config = ConfigDict(
18
+ populate_by_alias=True,
19
+ )
20
+
21
+ task: str
22
+ session_id: Optional[str] = Field(default=None, serialization_alias="sessionId")
23
+ max_failures: Optional[int] = Field(default=None, serialization_alias="maxFailures")
24
+ max_steps: Optional[int] = Field(default=None, serialization_alias="maxSteps")
25
+ keep_browser_open: Optional[bool] = Field(
26
+ default=None, serialization_alias="keepBrowserOpen"
27
+ )
28
+ session_options: Optional[CreateSessionParams] = Field(
29
+ default=None, serialization_alias="sessionOptions"
30
+ )
31
+
32
+
33
+ class StartClaudeComputerUseTaskResponse(BaseModel):
34
+ """
35
+ Response from starting a Claude Computer Use task.
36
+ """
37
+
38
+ model_config = ConfigDict(
39
+ populate_by_alias=True,
40
+ )
41
+
42
+ job_id: str = Field(alias="jobId")
43
+ live_url: Optional[str] = Field(default=None, alias="liveUrl")
44
+
45
+
46
+ class ClaudeComputerUseTaskStatusResponse(BaseModel):
47
+ """
48
+ Response from getting a Claude Computer Use task status.
49
+ """
50
+
51
+ model_config = ConfigDict(
52
+ populate_by_alias=True,
53
+ )
54
+
55
+ status: ClaudeComputerUseTaskStatus
56
+
57
+
58
+ class ClaudeComputerUseStepResponse(BaseModel):
59
+ """
60
+ Response from a single Claude Computer Use step.
61
+ """
62
+
63
+ model_config = ConfigDict(
64
+ populate_by_alias=True,
65
+ )
66
+
67
+ role: str
68
+ type: str
69
+ model: str
70
+ content: list[Any]
71
+ stop_reason: Optional[str] = Field(default=None)
72
+ stop_sequence: Optional[str] = Field(default=None)
73
+
74
+
75
+ class ClaudeComputerUseTaskData(BaseModel):
76
+ model_config = ConfigDict(
77
+ populate_by_alias=True,
78
+ )
79
+
80
+ steps: list[ClaudeComputerUseStepResponse]
81
+ final_result: Optional[str] = Field(default=None, alias="finalResult")
82
+
83
+
84
+ class ClaudeComputerUseTaskResponse(BaseModel):
85
+ """
86
+ Response from a Claude Computer Use task.
87
+ """
88
+
89
+ model_config = ConfigDict(
90
+ populate_by_alias=True,
91
+ )
92
+
93
+ job_id: str = Field(alias="jobId")
94
+ status: ClaudeComputerUseTaskStatus
95
+ data: Optional[ClaudeComputerUseTaskData] = Field(default=None, alias="data")
96
+ error: Optional[str] = Field(default=None, alias="error")
97
+ live_url: Optional[str] = Field(default=None, alias="liveUrl")
@@ -0,0 +1,131 @@
1
+ from typing import Any, Literal, Optional
2
+
3
+ from pydantic import BaseModel, ConfigDict, Field
4
+
5
+ from ..session import CreateSessionParams
6
+
7
+ CuaTaskStatus = Literal["pending", "running", "completed", "failed", "stopped"]
8
+
9
+
10
+ class StartCuaTaskParams(BaseModel):
11
+ """
12
+ Parameters for creating a new CUA task.
13
+ """
14
+
15
+ model_config = ConfigDict(
16
+ populate_by_alias=True,
17
+ )
18
+
19
+ task: str
20
+ session_id: Optional[str] = Field(default=None, serialization_alias="sessionId")
21
+ max_failures: Optional[int] = Field(default=None, serialization_alias="maxFailures")
22
+ max_steps: Optional[int] = Field(default=None, serialization_alias="maxSteps")
23
+ keep_browser_open: Optional[bool] = Field(
24
+ default=None, serialization_alias="keepBrowserOpen"
25
+ )
26
+ session_options: Optional[CreateSessionParams] = Field(
27
+ default=None, serialization_alias="sessionOptions"
28
+ )
29
+
30
+
31
+ class StartCuaTaskResponse(BaseModel):
32
+ """
33
+ Response from starting a CUA task.
34
+ """
35
+
36
+ model_config = ConfigDict(
37
+ populate_by_alias=True,
38
+ )
39
+
40
+ job_id: str = Field(alias="jobId")
41
+ live_url: Optional[str] = Field(default=None, alias="liveUrl")
42
+
43
+
44
+ class CuaTaskStatusResponse(BaseModel):
45
+ """
46
+ Response from getting a CUA task status.
47
+ """
48
+
49
+ model_config = ConfigDict(
50
+ populate_by_alias=True,
51
+ )
52
+
53
+ status: CuaTaskStatus
54
+
55
+
56
+ class CuaStepResponseError(BaseModel):
57
+ """
58
+ Error details for a CUA step response.
59
+ """
60
+
61
+ model_config = ConfigDict(
62
+ populate_by_alias=True,
63
+ )
64
+
65
+ code: str
66
+ message: str
67
+
68
+
69
+ class CuaStepIncompleteDetails(BaseModel):
70
+ """
71
+ Details about why a CUA step is incomplete.
72
+ """
73
+
74
+ model_config = ConfigDict(
75
+ populate_by_alias=True,
76
+ )
77
+
78
+ reason: Optional[str] = Field(default=None)
79
+
80
+
81
+ class CuaStepReasoning(BaseModel):
82
+ """
83
+ Reasoning information for a CUA step.
84
+ """
85
+
86
+ model_config = ConfigDict(
87
+ populate_by_alias=True,
88
+ )
89
+
90
+ effort: Optional[str] = Field(default=None)
91
+ generate_summary: Optional[str] = Field(default=None)
92
+
93
+
94
+ class CuaStepResponse(BaseModel):
95
+ """
96
+ Response from a single CUA step.
97
+ """
98
+
99
+ created_at: int
100
+ output_text: str
101
+ error: Optional[CuaStepResponseError] = None
102
+ incomplete_details: Optional[CuaStepIncompleteDetails] = None
103
+ model: str
104
+ output: list[Any]
105
+ reasoning: Optional[CuaStepReasoning] = None
106
+ status: Optional[str] = None
107
+
108
+
109
+ class CuaTaskData(BaseModel):
110
+ model_config = ConfigDict(
111
+ populate_by_alias=True,
112
+ )
113
+
114
+ steps: list[CuaStepResponse]
115
+ final_result: Optional[str] = Field(default=None, alias="finalResult")
116
+
117
+
118
+ class CuaTaskResponse(BaseModel):
119
+ """
120
+ Response from a CUA task.
121
+ """
122
+
123
+ model_config = ConfigDict(
124
+ populate_by_alias=True,
125
+ )
126
+
127
+ job_id: str = Field(alias="jobId")
128
+ status: CuaTaskStatus
129
+ data: Optional[CuaTaskData] = Field(default=None, alias="data")
130
+ error: Optional[str] = Field(default=None, alias="error")
131
+ live_url: Optional[str] = Field(default=None, alias="liveUrl")
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "hyperbrowser"
3
- version = "0.36.0"
3
+ version = "0.38.0"
4
4
  description = "Python SDK for hyperbrowser"
5
5
  authors = ["Nikhil Shahi <nshahi1998@gmail.com>"]
6
6
  license = "MIT"
@@ -1,6 +0,0 @@
1
- from .browser_use import BrowserUseManager
2
-
3
-
4
- class Agents:
5
- def __init__(self, client):
6
- self.browser_use = BrowserUseManager(client)
@@ -1,6 +0,0 @@
1
- from .browser_use import BrowserUseManager
2
-
3
-
4
- class Agents:
5
- def __init__(self, client):
6
- self.browser_use = BrowserUseManager(client)
File without changes
File without changes