hyperbrowser 0.68.0__py3-none-any.whl → 0.69.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.

@@ -5,6 +5,26 @@ from .agents.browser_use import (
5
5
  StartBrowserUseTaskParams,
6
6
  StartBrowserUseTaskResponse,
7
7
  BrowserUseApiKeys,
8
+ BrowserUseAgentBrain,
9
+ BrowserUseAgentOutput,
10
+ BrowserUseActionResult,
11
+ BrowserUseStepMetadata,
12
+ BrowserUseTabInfo,
13
+ BrowserUseCoordinates,
14
+ BrowserUseCoordinateSet,
15
+ BrowserUseViewportInfo,
16
+ BrowserUseDOMHistoryElement,
17
+ BrowserUseBrowserStateHistory,
18
+ BrowserUseAgentHistory,
19
+ BrowserUseAgentOutputV0710,
20
+ BrowserUseActionResultV0710,
21
+ BrowserUseBrowserStateHistoryV0710,
22
+ BrowserUseStepMetadataV0710,
23
+ BrowserUseAgentHistoryV0710,
24
+ BrowserUseAgentHistoryLatest,
25
+ BrowserUseTaskMetadata,
26
+ BrowserUseStep,
27
+ cast_steps_for_version,
8
28
  )
9
29
  from .agents.claude_computer_use import (
10
30
  ClaudeComputerUseTaskStatus,
@@ -64,6 +84,7 @@ from .consts import (
64
84
  SessionEventLogType,
65
85
  State,
66
86
  SessionRegion,
87
+ BrowserUseVersion,
67
88
  )
68
89
  from .crawl import (
69
90
  CrawledPage,
@@ -82,6 +103,7 @@ from .extract import (
82
103
  ExtractJobStatusResponse,
83
104
  StartExtractJobParams,
84
105
  StartExtractJobResponse,
106
+ ExtractJobMetadata,
85
107
  )
86
108
  from .profile import (
87
109
  CreateProfileParams,
@@ -105,6 +127,7 @@ from .scrape import (
105
127
  StartBatchScrapeJobResponse,
106
128
  StartScrapeJobParams,
107
129
  StartScrapeJobResponse,
130
+ StorageStateOptions,
108
131
  )
109
132
  from .computer_action import (
110
133
  ClickActionParams,
@@ -169,6 +192,7 @@ __all__ = [
169
192
  "SessionEventLogType",
170
193
  "State",
171
194
  "SessionRegion",
195
+ "BrowserUseVersion",
172
196
  # agents
173
197
  "HyperAgentTaskStatus",
174
198
  "HyperAgentActionOutput",
@@ -185,6 +209,26 @@ __all__ = [
185
209
  "BrowserUseTaskStatusResponse",
186
210
  "StartBrowserUseTaskParams",
187
211
  "StartBrowserUseTaskResponse",
212
+ "BrowserUseAgentBrain",
213
+ "BrowserUseAgentOutput",
214
+ "BrowserUseActionResult",
215
+ "BrowserUseStepMetadata",
216
+ "BrowserUseTabInfo",
217
+ "BrowserUseCoordinates",
218
+ "BrowserUseCoordinateSet",
219
+ "BrowserUseViewportInfo",
220
+ "BrowserUseDOMHistoryElement",
221
+ "BrowserUseBrowserStateHistory",
222
+ "BrowserUseAgentHistory",
223
+ "BrowserUseAgentOutputV0710",
224
+ "BrowserUseActionResultV0710",
225
+ "BrowserUseBrowserStateHistoryV0710",
226
+ "BrowserUseStepMetadataV0710",
227
+ "BrowserUseAgentHistoryV0710",
228
+ "BrowserUseAgentHistoryLatest",
229
+ "BrowserUseStep",
230
+ "BrowserUseTaskMetadata",
231
+ "cast_steps_for_version",
188
232
  "ClaudeComputerUseTaskStatus",
189
233
  "ClaudeComputerUseStepResponse",
190
234
  "ClaudeComputerUseTaskData",
@@ -228,6 +272,7 @@ __all__ = [
228
272
  "ExtractJobStatusResponse",
229
273
  "StartExtractJobParams",
230
274
  "StartExtractJobResponse",
275
+ "ExtractJobMetadata",
231
276
  # profile
232
277
  "CreateProfileParams",
233
278
  "CreateProfileResponse",
@@ -249,6 +294,7 @@ __all__ = [
249
294
  "StartBatchScrapeJobResponse",
250
295
  "StartScrapeJobParams",
251
296
  "StartScrapeJobResponse",
297
+ "StorageStateOptions",
252
298
  # session
253
299
  "BasicResponse",
254
300
  "CreateSessionParams",
@@ -2,7 +2,7 @@ from typing import Any, Dict, List, Literal, Optional, Type, Union
2
2
 
3
3
  from pydantic import BaseModel, ConfigDict, Field
4
4
 
5
- from ..consts import BrowserUseLlm
5
+ from ..consts import BrowserUseLlm, BrowserUseVersion
6
6
  from ..session import CreateSessionParams
7
7
 
8
8
  BrowserUseTaskStatus = Literal["pending", "running", "completed", "failed", "stopped"]
@@ -32,6 +32,9 @@ class StartBrowserUseTaskParams(BaseModel):
32
32
  )
33
33
 
34
34
  task: str
35
+ version: Optional[BrowserUseVersion] = Field(
36
+ default=None, serialization_alias="version"
37
+ )
35
38
  llm: Optional[BrowserUseLlm] = Field(default=None, serialization_alias="llm")
36
39
  session_id: Optional[str] = Field(default=None, serialization_alias="sessionId")
37
40
  validate_output: Optional[bool] = Field(
@@ -193,15 +196,79 @@ class BrowserUseAgentHistory(BaseModel):
193
196
  metadata: Optional[BrowserUseStepMetadata] = None
194
197
 
195
198
 
199
+ # ===== 0.7.10-specific response models =====
200
+
201
+
202
+ class BrowserUseAgentOutputV0710(BaseModel):
203
+ thinking: Optional[str] = None
204
+ evaluation_previous_goal: Optional[str] = None
205
+ memory: Optional[str] = None
206
+ next_goal: Optional[str] = None
207
+ action: list[dict]
208
+
209
+
210
+ class BrowserUseActionResultV0710(BaseModel):
211
+ is_done: Optional[bool] = False
212
+ success: Optional[bool] = None
213
+ error: Optional[str] = None
214
+ metadata: Optional[dict] = None
215
+ attachments: Optional[list[str]] = None
216
+ long_term_memory: Optional[str] = None
217
+ extracted_content: Optional[str] = None
218
+ include_extracted_content_only_once: Optional[bool] = False
219
+ include_in_memory: bool = False
220
+
221
+
222
+ class BrowserUseBrowserStateHistoryV0710(BaseModel):
223
+ url: str
224
+ title: str
225
+ tabs: list[dict]
226
+ interacted_element: Union[list[Union[dict, None]], list[None]]
227
+
228
+
229
+ class BrowserUseStepMetadataV0710(BaseModel):
230
+ step_start_time: float
231
+ step_end_time: float
232
+ step_number: int
233
+
234
+
235
+ class BrowserUseAgentHistoryV0710(BaseModel):
236
+ model_output: Union[BrowserUseAgentOutputV0710, None]
237
+ result: list[BrowserUseActionResultV0710]
238
+ state: BrowserUseBrowserStateHistoryV0710
239
+ metadata: Optional[BrowserUseStepMetadataV0710] = None
240
+
241
+
242
+ # ===== latest response models =====
243
+
244
+ BrowserUseAgentHistoryLatest = Dict[str, Any]
245
+
246
+ BrowserUseStep = Union[
247
+ BrowserUseAgentHistory, BrowserUseAgentHistoryV0710, BrowserUseAgentHistoryLatest
248
+ ]
249
+
250
+
196
251
  class BrowserUseTaskData(BaseModel):
197
252
  model_config = ConfigDict(
198
253
  populate_by_alias=True,
199
254
  )
200
255
 
201
- steps: list[BrowserUseAgentHistory]
256
+ steps: list[BrowserUseStep]
202
257
  final_result: Optional[str] = Field(default=None, alias="finalResult")
203
258
 
204
259
 
260
+ class BrowserUseTaskMetadata(BaseModel):
261
+ model_config = ConfigDict(
262
+ populate_by_alias=True,
263
+ )
264
+
265
+ input_tokens: Optional[int] = Field(default=None, alias="inputTokens")
266
+ output_tokens: Optional[int] = Field(default=None, alias="outputTokens")
267
+ num_task_steps_completed: Optional[int] = Field(
268
+ default=None, alias="numTaskStepsCompleted"
269
+ )
270
+
271
+
205
272
  class BrowserUseTaskResponse(BaseModel):
206
273
  """
207
274
  Response from a browser use task.
@@ -213,6 +280,20 @@ class BrowserUseTaskResponse(BaseModel):
213
280
 
214
281
  job_id: str = Field(alias="jobId")
215
282
  status: BrowserUseTaskStatus
283
+ metadata: Optional[BrowserUseTaskMetadata] = Field(default=None, alias="metadata")
216
284
  data: Optional[BrowserUseTaskData] = Field(default=None, alias="data")
217
285
  error: Optional[str] = Field(default=None, alias="error")
218
286
  live_url: Optional[str] = Field(default=None, alias="liveUrl")
287
+
288
+
289
+ def cast_steps_for_version(
290
+ steps: List[BrowserUseStep], version: BrowserUseVersion
291
+ ) -> List[BrowserUseStep]:
292
+ if version == "0.1.40":
293
+ return [BrowserUseAgentHistory.model_validate(s) for s in steps]
294
+ elif version == "0.7.10":
295
+ return [BrowserUseAgentHistoryV0710.model_validate(s) for s in steps]
296
+ elif version == "latest":
297
+ return steps
298
+ else:
299
+ raise ValueError(f"Invalid version: {version}")
@@ -104,6 +104,18 @@ class ClaudeComputerUseTaskData(BaseModel):
104
104
  final_result: Optional[str] = Field(default=None, alias="finalResult")
105
105
 
106
106
 
107
+ class ClaudeComputerUseTaskMetadata(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
+
107
119
  class ClaudeComputerUseTaskResponse(BaseModel):
108
120
  """
109
121
  Response from a Claude Computer Use task.
@@ -115,6 +127,9 @@ class ClaudeComputerUseTaskResponse(BaseModel):
115
127
 
116
128
  job_id: str = Field(alias="jobId")
117
129
  status: ClaudeComputerUseTaskStatus
130
+ metadata: Optional[ClaudeComputerUseTaskMetadata] = Field(
131
+ default=None, alias="metadata"
132
+ )
118
133
  data: Optional[ClaudeComputerUseTaskData] = Field(default=None, alias="data")
119
134
  error: Optional[str] = Field(default=None, alias="error")
120
135
  live_url: Optional[str] = Field(default=None, alias="liveUrl")
@@ -134,6 +134,18 @@ class CuaTaskData(BaseModel):
134
134
  final_result: Optional[str] = Field(default=None, alias="finalResult")
135
135
 
136
136
 
137
+ class CuaTaskMetadata(BaseModel):
138
+ model_config = ConfigDict(
139
+ populate_by_alias=True,
140
+ )
141
+
142
+ input_tokens: Optional[int] = Field(default=None, alias="inputTokens")
143
+ output_tokens: Optional[int] = Field(default=None, alias="outputTokens")
144
+ num_task_steps_completed: Optional[int] = Field(
145
+ default=None, alias="numTaskStepsCompleted"
146
+ )
147
+
148
+
137
149
  class CuaTaskResponse(BaseModel):
138
150
  """
139
151
  Response from a CUA task.
@@ -145,6 +157,7 @@ class CuaTaskResponse(BaseModel):
145
157
 
146
158
  job_id: str = Field(alias="jobId")
147
159
  status: CuaTaskStatus
160
+ metadata: Optional[CuaTaskMetadata] = Field(default=None, alias="metadata")
148
161
  data: Optional[CuaTaskData] = Field(default=None, alias="data")
149
162
  error: Optional[str] = Field(default=None, alias="error")
150
163
  live_url: Optional[str] = Field(default=None, alias="liveUrl")
@@ -104,6 +104,18 @@ class GeminiComputerUseTaskData(BaseModel):
104
104
  final_result: Optional[str] = Field(default=None, alias="finalResult")
105
105
 
106
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
+
107
119
  class GeminiComputerUseTaskResponse(BaseModel):
108
120
  """
109
121
  Response from a Gemini Computer Use task.
@@ -115,6 +127,9 @@ class GeminiComputerUseTaskResponse(BaseModel):
115
127
 
116
128
  job_id: str = Field(alias="jobId")
117
129
  status: GeminiComputerUseTaskStatus
130
+ metadata: Optional[GeminiComputerUseTaskMetadata] = Field(
131
+ default=None, alias="metadata"
132
+ )
118
133
  data: Optional[GeminiComputerUseTaskData] = Field(default=None, alias="data")
119
134
  error: Optional[str] = Field(default=None, alias="error")
120
135
  live_url: Optional[str] = Field(default=None, alias="liveUrl")
@@ -126,6 +126,16 @@ class HyperAgentTaskData(BaseModel):
126
126
  final_result: Optional[str] = Field(default=None, alias="finalResult")
127
127
 
128
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
+
129
139
  class HyperAgentTaskResponse(BaseModel):
130
140
  """
131
141
  Response from a HyperAgent task.
@@ -137,6 +147,7 @@ class HyperAgentTaskResponse(BaseModel):
137
147
 
138
148
  job_id: str = Field(alias="jobId")
139
149
  status: HyperAgentTaskStatus
150
+ metadata: Optional[HyperAgentTaskMetadata] = Field(default=None, alias="metadata")
140
151
  data: Optional[HyperAgentTaskData] = Field(default=None, alias="data")
141
152
  error: Optional[str] = Field(default=None, alias="error")
142
153
  live_url: Optional[str] = Field(default=None, alias="liveUrl")
@@ -16,6 +16,8 @@ SessionEventLogType = Literal[
16
16
 
17
17
  POLLING_ATTEMPTS = 5
18
18
 
19
+ BrowserUseVersion = Literal["0.1.40", "0.7.10", "latest"]
20
+
19
21
  BrowserUseLlm = Literal[
20
22
  "gpt-4o",
21
23
  "gpt-4o-mini",
@@ -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
@@ -23,6 +23,15 @@ class ScreenshotOptions(BaseModel):
23
23
  )
24
24
 
25
25
 
26
+ class StorageStateOptions(BaseModel):
27
+ local_storage: Optional[dict[str, str]] = Field(
28
+ default=None, serialization_alias="localStorage"
29
+ )
30
+ session_storage: Optional[dict[str, str]] = Field(
31
+ default=None, serialization_alias="sessionStorage"
32
+ )
33
+
34
+
26
35
  class ScrapeOptions(BaseModel):
27
36
  """
28
37
  Options for scraping a page.
@@ -46,6 +55,9 @@ class ScrapeOptions(BaseModel):
46
55
  screenshot_options: Optional[ScreenshotOptions] = Field(
47
56
  default=None, serialization_alias="screenshotOptions"
48
57
  )
58
+ storage_state: Optional[StorageStateOptions] = Field(
59
+ default=None, serialization_alias="storageState"
60
+ )
49
61
 
50
62
 
51
63
  class StartScrapeJobParams(BaseModel):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hyperbrowser
3
- Version: 0.68.0
3
+ Version: 0.69.0
4
4
  Summary: Python SDK for hyperbrowser
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -32,19 +32,19 @@ hyperbrowser/client/managers/sync_manager/team.py,sha256=VKuKXpbGBZ-iwTDAlO0U0yv
32
32
  hyperbrowser/client/sync.py,sha256=Oi-d4upNRkAUS5T5LcJPun5hL6FPbODn_PcM1AERCrg,1519
33
33
  hyperbrowser/config.py,sha256=7P-sbcvqXVr8Qzubo5O6jJgzcCgB5DdwbeIgEjRZNlY,623
34
34
  hyperbrowser/exceptions.py,sha256=SUUkptK2OL36xDORYmSicaTYR7pMbxeWAjAgz35xnM8,1171
35
- hyperbrowser/models/__init__.py,sha256=RUP1RTipem3WiytncDOZp_nsEjG_oMxjtb6_e283s3M,7502
36
- hyperbrowser/models/agents/browser_use.py,sha256=Na3av_EivqOCtEjd-Bfm68sp3H_tr_cE8q1oFCjagUU,6303
37
- hyperbrowser/models/agents/claude_computer_use.py,sha256=RflxYn2Js4TQQsAM3liTBoWJkIViYjOuBVFOPR4sTho,3311
38
- hyperbrowser/models/agents/cua.py,sha256=mDFC3hVWQ3OS9wpjRTPdJgXaIOLDw00GGPD_pURo8Tw,3609
39
- hyperbrowser/models/agents/gemini_computer_use.py,sha256=31nSL6BvTTdidVWT1Q0ftftJnPWQJIEDW9R4OxoUuKo,3342
40
- hyperbrowser/models/agents/hyper_agent.py,sha256=tHca1Xw6sHekF0SAL1buKMjeUjwmm8qciKFCWsJ1q0g,3728
35
+ hyperbrowser/models/__init__.py,sha256=H8Oy6ulDFqogDhfKe7VEq3c-7MWjYrbhvrYi2upLEyE,8878
36
+ hyperbrowser/models/agents/browser_use.py,sha256=KxbiDNhcaj86c2qoQ7BceJG7iVfgrKVntQNDil_Iz6A,8767
37
+ hyperbrowser/models/agents/claude_computer_use.py,sha256=nMVbGwIisyOR9JI3zvpxwwxtzxqvAySLcbCQm3mhJyo,3802
38
+ hyperbrowser/models/agents/cua.py,sha256=mL094vIVZbMpVB19kWshY7Ekmr6kwyYZpc6T2yaMwOA,4058
39
+ hyperbrowser/models/agents/gemini_computer_use.py,sha256=GtTDD9aUtOwEWutuOp1dGtRSLjlGr9e8xKMDGRDvfD4,3833
40
+ hyperbrowser/models/agents/hyper_agent.py,sha256=zv4yXdp4d2UPZMzaqXuL5FDq3FM6XM3U-cnWCMk-BQ4,4039
41
41
  hyperbrowser/models/computer_action.py,sha256=C6LJ5xQ03VUFbDM78MfwSGG_Z0tNDCwsBx113noWp_o,5678
42
- hyperbrowser/models/consts.py,sha256=xEfvmRa8UIMPshQdSbrmJ1v_qiJIOuOuG55S9MTg8YU,7332
42
+ hyperbrowser/models/consts.py,sha256=J5ga3UEGRFwQ5VvaYZWS-JdLxFCdusAQ9AoXBobpslk,7391
43
43
  hyperbrowser/models/crawl.py,sha256=XUS5Ja-Abl8gMyDtLIsRaEKa_taSOORMLOFCdAPgGaI,2820
44
44
  hyperbrowser/models/extension.py,sha256=nXjKXKt9R7RxyZ4hd3EvfqZsEGy_ufh1r5j2mqCLykQ,804
45
- hyperbrowser/models/extract.py,sha256=DXg0HtO44plAtcFOmqUpdp9P93tq45U2fLWxn5jdjAw,1745
45
+ hyperbrowser/models/extract.py,sha256=RAIMHDIu7e20o4ABPyPa_QbsIqqOb3ZM5AeA4PXbSdE,2140
46
46
  hyperbrowser/models/profile.py,sha256=GF0esQwru0oOs9sQ9DCuO8VX4GKPgRgKCVP8s7g0Pig,1846
47
- hyperbrowser/models/scrape.py,sha256=iMsUuMx3UFtSci6TVUpcH5ytbgwiImIXjviVcGZ_gBQ,5048
47
+ hyperbrowser/models/scrape.py,sha256=W5JAApb7tlqBM7RIRJWdw7D8T5vg0DyVXcJyO9IrGZs,5445
48
48
  hyperbrowser/models/session.py,sha256=50mKJGpnc3_9Hil-K0c7osZ_dE8V_jedEo9Db6DJ3lo,12892
49
49
  hyperbrowser/models/team.py,sha256=dPBFL3TPO0AF_UzqP4sENMPhku_5j00uwC24zG558MU,338
50
50
  hyperbrowser/tools/__init__.py,sha256=L-2xveBbSuIBQBQhJmXGCLNYEUq_XHDdgz_gBAsmQZo,4605
@@ -54,7 +54,7 @@ hyperbrowser/tools/schema.py,sha256=YFUAoQjx_SpjezS3UQdTCCn4xMdN3CgEeKAlulkIATc,
54
54
  hyperbrowser/transport/async_transport.py,sha256=6HKoeM5TutIqraEscEWobvSPWF3iVKh2hPflGNKwykw,4128
55
55
  hyperbrowser/transport/base.py,sha256=ildpMrDiM8nvrSGrH2LTOafmB17T7PQB_NQ1ODA378U,1703
56
56
  hyperbrowser/transport/sync.py,sha256=aUVpxWF8sqSycLNKxVNEZvlsZSoqc1eHgPK1Y1QA1u8,3422
57
- hyperbrowser-0.68.0.dist-info/METADATA,sha256=ilcYlR2jOQ2R2kfxi_2dLt4g13G3GjMGbFcmyz18jPo,3651
58
- hyperbrowser-0.68.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
59
- hyperbrowser-0.68.0.dist-info/licenses/LICENSE,sha256=NbSXeOZ2JKnPpkyLBYkfPqt9eWNy-Lx3xb4sjsSR9mI,1069
60
- hyperbrowser-0.68.0.dist-info/RECORD,,
57
+ hyperbrowser-0.69.0.dist-info/METADATA,sha256=iar1W8wJt8F-WZJy4uw82CYSv_d7DHeUpn2ivdgZO6A,3651
58
+ hyperbrowser-0.69.0.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
59
+ hyperbrowser-0.69.0.dist-info/licenses/LICENSE,sha256=NbSXeOZ2JKnPpkyLBYkfPqt9eWNy-Lx3xb4sjsSR9mI,1069
60
+ hyperbrowser-0.69.0.dist-info/RECORD,,