vibesurf 0.1.10__py3-none-any.whl → 0.1.12__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 vibesurf might be problematic. Click here for more details.
- vibe_surf/_version.py +2 -2
- vibe_surf/agents/browser_use_agent.py +68 -45
- vibe_surf/agents/prompts/report_writer_prompt.py +73 -0
- vibe_surf/agents/prompts/vibe_surf_prompt.py +85 -172
- vibe_surf/agents/report_writer_agent.py +380 -226
- vibe_surf/agents/vibe_surf_agent.py +880 -825
- vibe_surf/agents/views.py +130 -0
- vibe_surf/backend/api/activity.py +3 -1
- vibe_surf/backend/api/browser.py +9 -5
- vibe_surf/backend/api/config.py +8 -5
- vibe_surf/backend/api/files.py +59 -50
- vibe_surf/backend/api/models.py +2 -2
- vibe_surf/backend/api/task.py +46 -13
- vibe_surf/backend/database/manager.py +24 -18
- vibe_surf/backend/database/queries.py +199 -192
- vibe_surf/backend/database/schemas.py +1 -1
- vibe_surf/backend/main.py +4 -2
- vibe_surf/backend/shared_state.py +28 -35
- vibe_surf/backend/utils/encryption.py +3 -1
- vibe_surf/backend/utils/llm_factory.py +41 -36
- vibe_surf/browser/agent_browser_session.py +0 -4
- vibe_surf/browser/browser_manager.py +14 -8
- vibe_surf/browser/utils.py +5 -3
- vibe_surf/browser/watchdogs/dom_watchdog.py +0 -45
- vibe_surf/chrome_extension/background.js +4 -0
- vibe_surf/chrome_extension/scripts/api-client.js +13 -0
- vibe_surf/chrome_extension/scripts/file-manager.js +27 -71
- vibe_surf/chrome_extension/scripts/session-manager.js +21 -3
- vibe_surf/chrome_extension/scripts/ui-manager.js +831 -48
- vibe_surf/chrome_extension/sidepanel.html +21 -4
- vibe_surf/chrome_extension/styles/activity.css +365 -5
- vibe_surf/chrome_extension/styles/input.css +139 -0
- vibe_surf/cli.py +5 -22
- vibe_surf/common.py +35 -0
- vibe_surf/llm/openai_compatible.py +217 -99
- vibe_surf/logger.py +99 -0
- vibe_surf/{controller/vibesurf_tools.py → tools/browser_use_tools.py} +233 -219
- vibe_surf/tools/file_system.py +437 -0
- vibe_surf/{controller → tools}/mcp_client.py +4 -3
- vibe_surf/tools/report_writer_tools.py +21 -0
- vibe_surf/tools/vibesurf_tools.py +657 -0
- vibe_surf/tools/views.py +120 -0
- {vibesurf-0.1.10.dist-info → vibesurf-0.1.12.dist-info}/METADATA +6 -2
- {vibesurf-0.1.10.dist-info → vibesurf-0.1.12.dist-info}/RECORD +49 -43
- vibe_surf/controller/file_system.py +0 -53
- vibe_surf/controller/views.py +0 -37
- /vibe_surf/{controller → tools}/__init__.py +0 -0
- {vibesurf-0.1.10.dist-info → vibesurf-0.1.12.dist-info}/WHEEL +0 -0
- {vibesurf-0.1.10.dist-info → vibesurf-0.1.12.dist-info}/entry_points.txt +0 -0
- {vibesurf-0.1.10.dist-info → vibesurf-0.1.12.dist-info}/licenses/LICENSE +0 -0
- {vibesurf-0.1.10.dist-info → vibesurf-0.1.12.dist-info}/top_level.txt +0 -0
vibe_surf/tools/views.py
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
from typing import Generic, TypeVar
|
|
2
|
+
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class HoverAction(BaseModel):
|
|
6
|
+
"""Parameters for hover action"""
|
|
7
|
+
index: int | None = None
|
|
8
|
+
xpath: str | None = None
|
|
9
|
+
selector: str | None = None
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ExtractionAction(BaseModel):
|
|
13
|
+
query: str = Field(
|
|
14
|
+
default="summary this page",
|
|
15
|
+
description='Extraction goal',
|
|
16
|
+
)
|
|
17
|
+
extract_links: bool | None = Field(
|
|
18
|
+
default=False,
|
|
19
|
+
description='Whether to extract links',
|
|
20
|
+
)
|
|
21
|
+
tab_id: str | None = Field(
|
|
22
|
+
default=None,
|
|
23
|
+
min_length=4,
|
|
24
|
+
max_length=4,
|
|
25
|
+
description='exact 4 character Tab ID of the tab for extraction',
|
|
26
|
+
) # last 4 chars of TargetID
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class FileExtractionAction(BaseModel):
|
|
30
|
+
"""Parameters for file content extraction action"""
|
|
31
|
+
file_path: str = Field(
|
|
32
|
+
description='Path to the file to extract content from',
|
|
33
|
+
)
|
|
34
|
+
query: str = Field(
|
|
35
|
+
default="Extract and summarize the content from this file",
|
|
36
|
+
description='Query or instruction for content extraction',
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class BrowserUseAgentTask(BaseModel):
|
|
41
|
+
"""Parameters for a single browser_use agent task"""
|
|
42
|
+
tab_id: str | None = Field(
|
|
43
|
+
default=None,
|
|
44
|
+
description='Tab ID to execute the task on. If None, a new blank page will be created',
|
|
45
|
+
)
|
|
46
|
+
task: str = Field(
|
|
47
|
+
description='Task description focusing on what needs to be done, goals, and expected returns. Browser_use agent has its own planning and execution capabilities',
|
|
48
|
+
)
|
|
49
|
+
task_files: list[str] | None = Field(
|
|
50
|
+
default=None,
|
|
51
|
+
description='Optional list of file paths that may be needed for executing this task',
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class BrowserUseAgentExecution(BaseModel):
|
|
56
|
+
"""Parameters for executing browser_use agent tasks in parallel"""
|
|
57
|
+
tasks: list[BrowserUseAgentTask] = Field(
|
|
58
|
+
description='List of tasks to execute concurrently using browser_use agents for improved efficiency. '
|
|
59
|
+
'If only one task is provided, the agent can take over the entire browser and can also see and operate all tabs.',
|
|
60
|
+
min_length=1,
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
class BrowserUseFile(BaseModel):
|
|
64
|
+
file_path: str = Field(description='Path to the file')
|
|
65
|
+
file_description: str = Field(
|
|
66
|
+
description='Description of the file. Briefly describe what this file is and what key information it contains.',
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
class BrowserUseDoneAction(BaseModel):
|
|
71
|
+
"""Parameters for done browser_use agent tasks"""
|
|
72
|
+
text: str
|
|
73
|
+
files_to_return: list[BrowserUseFile] | None = Field(
|
|
74
|
+
description='List of files relative to user request or task.',
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class ReportWriterTask(BaseModel):
|
|
79
|
+
"""Parameters for report writer agent task"""
|
|
80
|
+
task: str = Field(
|
|
81
|
+
description='Task description including report requirements, goals, insights seen, and any hints or tips for generating the report',
|
|
82
|
+
)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
class TodoGenerateAction(BaseModel):
|
|
86
|
+
"""Parameters for generating todo.md file"""
|
|
87
|
+
todo_items: list[str] = Field(
|
|
88
|
+
description='List of todo items to write to todo.md file',
|
|
89
|
+
min_length=1,
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
class TodoModification(BaseModel):
|
|
94
|
+
"""Single todo modification operation"""
|
|
95
|
+
action: str = Field(
|
|
96
|
+
description='Type of modification: "add", "remove", "complete", or "uncompleted"',
|
|
97
|
+
)
|
|
98
|
+
item: str = Field(
|
|
99
|
+
description='Text of the todo item to operate on',
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
class TodoModifyAction(BaseModel):
|
|
104
|
+
"""Parameters for modifying todo items"""
|
|
105
|
+
modifications: list[TodoModification] = Field(
|
|
106
|
+
description='List of todo modifications to apply',
|
|
107
|
+
min_length=1,
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
class VibeSurfDoneAction(BaseModel):
|
|
112
|
+
"""Parameters for task completion output"""
|
|
113
|
+
response: str = Field(
|
|
114
|
+
description='Task completion response - can be simple response for basic tasks or comprehensive markdown summary for complex tasks with key findings, results, and file links',
|
|
115
|
+
)
|
|
116
|
+
suggestion_follow_tasks: list[str] | None = Field(
|
|
117
|
+
default=None,
|
|
118
|
+
description='Optional list of 1-3 suggested follow-up tasks. Each task can only be described in one sentence, and each task must be strongly related to or extended from the original task.',
|
|
119
|
+
max_length=3,
|
|
120
|
+
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: vibesurf
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.12
|
|
4
4
|
Summary: VibeSurf: A powerful browser assistant for vibe surfing
|
|
5
5
|
Author: Shao Warm
|
|
6
6
|
License: Apache-2.0
|
|
@@ -37,7 +37,11 @@ Requires-Dist: aiosqlite>=0.21.0
|
|
|
37
37
|
Requires-Dist: rich>=13.0.0
|
|
38
38
|
Requires-Dist: greenlet>=3.2.4
|
|
39
39
|
Requires-Dist: getmac>=0.9.5
|
|
40
|
-
Requires-Dist: browser-use==0.7.
|
|
40
|
+
Requires-Dist: browser-use==0.7.7
|
|
41
|
+
Requires-Dist: markdown-pdf>=1.9
|
|
42
|
+
Requires-Dist: nanoid>=2.0.0
|
|
43
|
+
Requires-Dist: markdownify>=1.2.0
|
|
44
|
+
Requires-Dist: pathvalidate>=3.3.1
|
|
41
45
|
Dynamic: license-file
|
|
42
46
|
|
|
43
47
|
# VibeSurf: A powerful browser assistant for vibe surfing
|
|
@@ -1,68 +1,72 @@
|
|
|
1
1
|
vibe_surf/__init__.py,sha256=WtduuMFGauMD_9dpk4fnRnLTAP6ka9Lfu0feAFNzLfo,339
|
|
2
|
-
vibe_surf/_version.py,sha256=
|
|
3
|
-
vibe_surf/cli.py,sha256=
|
|
2
|
+
vibe_surf/_version.py,sha256=cEPXLUpTV7EzqolnyXW8nf8Hr6IVyBji9CzB6Cq_Ar0,706
|
|
3
|
+
vibe_surf/cli.py,sha256=pbep2dBeQqralZ8AggkH4h2nayBarbdN8lhZxo35gNU,16689
|
|
4
|
+
vibe_surf/common.py,sha256=_WWMxen5wFwzUjEShn3yDVC1OBFUiJ6Vccadi6tuG6w,1215
|
|
5
|
+
vibe_surf/logger.py,sha256=k53MFA96QX6t9OfcOf1Zws8PP0OOqjVJfhUD3Do9lKw,3043
|
|
4
6
|
vibe_surf/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
-
vibe_surf/agents/browser_use_agent.py,sha256=
|
|
6
|
-
vibe_surf/agents/report_writer_agent.py,sha256=
|
|
7
|
-
vibe_surf/agents/vibe_surf_agent.py,sha256=
|
|
7
|
+
vibe_surf/agents/browser_use_agent.py,sha256=1gbljYbB8drL_vZm2jFs5d3cZHWfB6CRIT6blwiPvhs,46024
|
|
8
|
+
vibe_surf/agents/report_writer_agent.py,sha256=tKELps-FjZq06OKXpoyS-zJzvfdYXM6UnXDrR2oZk6M,20970
|
|
9
|
+
vibe_surf/agents/vibe_surf_agent.py,sha256=GRCqf198nqvS5HRu5Dv89qjiS-2Jn39KJR1r1Ih6vJQ,73115
|
|
10
|
+
vibe_surf/agents/views.py,sha256=bcVOxd9On2lJ4NSar5RqP1V7Nw_RBtkHJPE-f2kVdRA,4750
|
|
8
11
|
vibe_surf/agents/prompts/__init__.py,sha256=l4ieA0D8kLJthyNN85FKLNe4ExBa3stY3l-aImLDRD0,36
|
|
9
|
-
vibe_surf/agents/prompts/
|
|
12
|
+
vibe_surf/agents/prompts/report_writer_prompt.py,sha256=sZE8MUT1CDLmRzbnbEQzAvTwJjpITgh2Q8g1_eXmkzE,4454
|
|
13
|
+
vibe_surf/agents/prompts/vibe_surf_prompt.py,sha256=8bC7IJNbK7_jLbxjVsta3urZIi-FLCQbfSLQEjnkeLQ,5579
|
|
10
14
|
vibe_surf/backend/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
15
|
vibe_surf/backend/llm_config.py,sha256=9V8Gg065TQALbOKQnOqFWd8RzOJjegOD8w6YOf90Q7Y,5036
|
|
12
|
-
vibe_surf/backend/main.py,sha256=
|
|
13
|
-
vibe_surf/backend/shared_state.py,sha256=
|
|
16
|
+
vibe_surf/backend/main.py,sha256=nZDs_FkYU7NdqSm1O4OwHJslYIJZL1Gr3CEKa8ByaEY,7178
|
|
17
|
+
vibe_surf/backend/shared_state.py,sha256=cVZepa1A0vo4tzNJM_-8y2F4DkRTx6Qo7ZrKW6d7aVg,22860
|
|
14
18
|
vibe_surf/backend/api/__init__.py,sha256=XxF1jUOORpLYCfFuPrrnUGRnOrr6ClH0_MNPU-4RnSs,68
|
|
15
|
-
vibe_surf/backend/api/activity.py,sha256=
|
|
16
|
-
vibe_surf/backend/api/browser.py,sha256=
|
|
17
|
-
vibe_surf/backend/api/config.py,sha256=
|
|
18
|
-
vibe_surf/backend/api/files.py,sha256=
|
|
19
|
-
vibe_surf/backend/api/models.py,sha256=
|
|
20
|
-
vibe_surf/backend/api/task.py,sha256=
|
|
19
|
+
vibe_surf/backend/api/activity.py,sha256=_cnHusqolt5Hf3KdAf6FK-3sBc-TSaadmb5dJxGI57A,9398
|
|
20
|
+
vibe_surf/backend/api/browser.py,sha256=NXedyZG3NIVRIx5O7d9mHwVWX-Q4_KsX5mSgfKt8UEA,2122
|
|
21
|
+
vibe_surf/backend/api/config.py,sha256=EwzxYvC6HlaVo2OFWjtBmBMjX4eW2q8hp7l2LO2GZV0,27124
|
|
22
|
+
vibe_surf/backend/api/files.py,sha256=kJMG9MWECKXwGh64Q6xvAzNjeZGcLhIEnn65HiMZHKE,11762
|
|
23
|
+
vibe_surf/backend/api/models.py,sha256=iyMBdpDkOfwx0h2yRkjmYjRdFyDErhO8XZcWTurdcmU,10347
|
|
24
|
+
vibe_surf/backend/api/task.py,sha256=pe4CHxM7Xc7lzvbslRxxSF-TKRiFj3A6RXCjHpP8f_o,12343
|
|
21
25
|
vibe_surf/backend/database/__init__.py,sha256=XhmcscnhgMhUyXML7m4SnuQIqkFpyY_zJ0D3yYa2RqQ,239
|
|
22
|
-
vibe_surf/backend/database/manager.py,sha256=
|
|
26
|
+
vibe_surf/backend/database/manager.py,sha256=aC8XQc68qDsaryrux7VfCEl2hnEZL5kfnEkXWXPg2ig,4427
|
|
23
27
|
vibe_surf/backend/database/models.py,sha256=mePuHsaSqJKA4TthvXbup_Ioann2_chxywiLKqAWyh4,7009
|
|
24
|
-
vibe_surf/backend/database/queries.py,sha256=
|
|
25
|
-
vibe_surf/backend/database/schemas.py,sha256=
|
|
28
|
+
vibe_surf/backend/database/queries.py,sha256=2ff9w7piY6ssIPgqnEM15qCX8gsZuUgmS00fwaZSEHQ,33638
|
|
29
|
+
vibe_surf/backend/database/schemas.py,sha256=OPnpRKwYG1Cu8geJ6pajiEDF8x8mRestXnAfI4Gy18w,3402
|
|
26
30
|
vibe_surf/backend/migrations/__init__.py,sha256=dLhZwW6AGyfBSid-QJPCpIlS4DnYDvO8NyI4s8JAZB8,383
|
|
27
31
|
vibe_surf/backend/migrations/init_db.py,sha256=pY2Yq7K1vPxqT8r3jlAQcYEQWK-GGbb0F7W5asGpuew,10399
|
|
28
32
|
vibe_surf/backend/migrations/seed_data.py,sha256=L6Ll-u8P4cICAUlD5y9urQPSUld6M67erSBCEIdw8Uc,8239
|
|
29
33
|
vibe_surf/backend/utils/__init__.py,sha256=V8leMFp7apAglUAoCHPZrNNcRHthSLYIudIJE5qwjb0,184
|
|
30
|
-
vibe_surf/backend/utils/encryption.py,sha256=
|
|
31
|
-
vibe_surf/backend/utils/llm_factory.py,sha256=
|
|
34
|
+
vibe_surf/backend/utils/encryption.py,sha256=CjLNh_n0Luhfa-6BB-icfzkiiDqj5b4Gu6MADU3p2eM,3754
|
|
35
|
+
vibe_surf/backend/utils/llm_factory.py,sha256=g1G_fkIBdDqZypTGuYGgnU5CCudpVE505n4AUdlSE5Q,8991
|
|
32
36
|
vibe_surf/browser/__init__.py,sha256=_UToO2fZfSCrfjOcxhn4Qq7ZLbYeyPuUUEmqIva-Yv8,325
|
|
33
37
|
vibe_surf/browser/agen_browser_profile.py,sha256=4H4qDjqLqHAfMi3niBI9fd0S1GlVDWYDUUOrEQoNkl8,5677
|
|
34
|
-
vibe_surf/browser/agent_browser_session.py,sha256=
|
|
35
|
-
vibe_surf/browser/browser_manager.py,sha256=
|
|
36
|
-
vibe_surf/browser/utils.py,sha256=
|
|
38
|
+
vibe_surf/browser/agent_browser_session.py,sha256=rptz2MdXspS44zC21nJaLOmp5aEWsvBfvzpDk5Jr-mA,33884
|
|
39
|
+
vibe_surf/browser/browser_manager.py,sha256=PFJ9flmqR2uokuRZ3PDh_Dy6_6qcQ6kH_eRc1yT6Iq8,11257
|
|
40
|
+
vibe_surf/browser/utils.py,sha256=bBtpMiyz2ixWOr31GbJwZ8pVYcnxztKjTJJO92z1BDY,35742
|
|
37
41
|
vibe_surf/browser/watchdogs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
38
42
|
vibe_surf/browser/watchdogs/action_watchdog.py,sha256=6lM0nOR67clLzC6nVEMZ2Vam8VHDW8GRlg_jbGUHbPk,5297
|
|
39
|
-
vibe_surf/browser/watchdogs/dom_watchdog.py,sha256=
|
|
40
|
-
vibe_surf/chrome_extension/background.js,sha256=
|
|
43
|
+
vibe_surf/browser/watchdogs/dom_watchdog.py,sha256=c0AJo2yckWFZqpgnPz7RbsRjcpwlhjD4mSIzCAbRn48,10994
|
|
44
|
+
vibe_surf/chrome_extension/background.js,sha256=qXbX-XhEI5reW7n7ePBcyqEJUh4HtlcAxgfWvg92-_k,19628
|
|
41
45
|
vibe_surf/chrome_extension/config.js,sha256=g53UkfsaOFNC6fZG-THlBxdSjvswPsaQ9w8rxiHNq2E,1093
|
|
42
46
|
vibe_surf/chrome_extension/content.js,sha256=q6JRpmHAEdPWNnFSIqoPv8eBm0T574c3H5hp-M4LYlc,8027
|
|
43
47
|
vibe_surf/chrome_extension/dev-reload.js,sha256=xQpi-1Ekb5P8Ogsm6rUK09QzxafwH0H409zBKmaUFNw,1790
|
|
44
48
|
vibe_surf/chrome_extension/manifest.json,sha256=B08nHuU-bPc-pUr30Y-of39TjMlrE7D5gP2sZjZ8CrE,1142
|
|
45
49
|
vibe_surf/chrome_extension/popup.html,sha256=n3dI_-WbILm0q8O_za6xX0WvOofz5lwT_7YXs0u9RAE,4248
|
|
46
|
-
vibe_surf/chrome_extension/sidepanel.html,sha256=
|
|
50
|
+
vibe_surf/chrome_extension/sidepanel.html,sha256=ams_TCA68787uVRnQ7J70b4rNzMEWzQsgVvSHoabouI,25942
|
|
47
51
|
vibe_surf/chrome_extension/icons/convert-svg.js,sha256=j137nZA7MJK35NtrwWff8yb3UEKa5XTAvnV6EjY-CVI,953
|
|
48
52
|
vibe_surf/chrome_extension/icons/logo-preview.html,sha256=hrgU45uziKHKIb8be9P4ZrZJyGggWnm2M5oEu89V5sM,6962
|
|
49
53
|
vibe_surf/chrome_extension/icons/logo.icns,sha256=ZzY1eIKF4dNhNW4CeE1UBQloxNVC7bQx3qcClo3CnMQ,1569615
|
|
50
54
|
vibe_surf/chrome_extension/icons/logo.png,sha256=PLmv1E6sCGXUE5ZDxr-pFPQd9Gvaw_f1TnYmF8VIssU,566385
|
|
51
|
-
vibe_surf/chrome_extension/scripts/api-client.js,sha256=
|
|
52
|
-
vibe_surf/chrome_extension/scripts/file-manager.js,sha256=
|
|
55
|
+
vibe_surf/chrome_extension/scripts/api-client.js,sha256=EMxNiuyw76UZ6K7-qOP2qpZDmZGvvZ8xPFy5pwIPu0w,13595
|
|
56
|
+
vibe_surf/chrome_extension/scripts/file-manager.js,sha256=WcEaeoECq84jXqEo3Q2ywmqppwSUVm-0dtrbTYXL07g,15809
|
|
53
57
|
vibe_surf/chrome_extension/scripts/history-manager.js,sha256=J_EiBKrRp2cTxuy0Sq5oCju5YuX0_2pGG6NWrJSjC24,22218
|
|
54
58
|
vibe_surf/chrome_extension/scripts/main.js,sha256=WhmCGktQoSl7aaMl8a9ysJJiysAjf12bWGypMucCSVg,16913
|
|
55
59
|
vibe_surf/chrome_extension/scripts/markdown-it.min.js,sha256=gZ3xe0BdCJplNiHWTKrm6AGZydPy34jJKZqFIf-7hIw,102948
|
|
56
60
|
vibe_surf/chrome_extension/scripts/modal-manager.js,sha256=VjkbTfknzwoUHFoSiLj19J18eTZ6u78I0ujuOIDAKhU,13850
|
|
57
|
-
vibe_surf/chrome_extension/scripts/session-manager.js,sha256=
|
|
61
|
+
vibe_surf/chrome_extension/scripts/session-manager.js,sha256=LGSiUHSeMgJwIWluk4TuoomSi_z6m_qDc08Vbg6SOWw,20680
|
|
58
62
|
vibe_surf/chrome_extension/scripts/settings-manager.js,sha256=FE5rMm3HTY1M7dzyQ2jnmCRmff1PDtqy6GNDV3tJOVk,47435
|
|
59
|
-
vibe_surf/chrome_extension/scripts/ui-manager.js,sha256=
|
|
60
|
-
vibe_surf/chrome_extension/styles/activity.css,sha256=
|
|
63
|
+
vibe_surf/chrome_extension/scripts/ui-manager.js,sha256=K5jLaCc1KpX1R74a_PVOemEn6008amChHgbQMjsLi9s,78695
|
|
64
|
+
vibe_surf/chrome_extension/styles/activity.css,sha256=aEFa_abskrDQvwsesPVOyJW3rUQUEBQpMKPHhY94CoA,19601
|
|
61
65
|
vibe_surf/chrome_extension/styles/animations.css,sha256=TLAet_xXBxCA-H36BWP4xBGBIVjbDdAj7Q6OPxPsbE8,7891
|
|
62
66
|
vibe_surf/chrome_extension/styles/base.css,sha256=d8nt7Wej1r57G6pnBIGKEVkepFxlq8Ets0isngCf5w8,1296
|
|
63
67
|
vibe_surf/chrome_extension/styles/components.css,sha256=7K6khbJcONVAArfeS4qmPBUJxvGGs20-eEw62bD_7VI,14741
|
|
64
68
|
vibe_surf/chrome_extension/styles/history-modal.css,sha256=xCg0EPz1N4kg47jnz9q9E1M4zGag8lJMt_msAOkZi3M,16583
|
|
65
|
-
vibe_surf/chrome_extension/styles/input.css,sha256=
|
|
69
|
+
vibe_surf/chrome_extension/styles/input.css,sha256=ZEApufxeDOdeB5MowC3QQccrj_sKoj0-vxlgcf7rmWM,11986
|
|
66
70
|
vibe_surf/chrome_extension/styles/layout.css,sha256=ggh-lWpP6sHubFkshf9dcmA52LiXw7VJmQXcM5_EGcY,3528
|
|
67
71
|
vibe_surf/chrome_extension/styles/responsive.css,sha256=a_SFX-PeOcenG4xMeoru5XFnnXdf0YhEyRzvTVVZHdI,8529
|
|
68
72
|
vibe_surf/chrome_extension/styles/settings-environment.css,sha256=OzgezmfZZ_yD60Jy9Uiq83mDmMCfk2dPPcZISb9Eqd4,3390
|
|
@@ -72,16 +76,18 @@ vibe_surf/chrome_extension/styles/settings-profiles.css,sha256=o0FowPPiZum_DvYIG
|
|
|
72
76
|
vibe_surf/chrome_extension/styles/settings-responsive.css,sha256=jLE0yG15n2aI6_6QF04Rh0Y-oqqLNen81YAVt5yc2Ws,2168
|
|
73
77
|
vibe_surf/chrome_extension/styles/settings-utilities.css,sha256=3PuQS2857kg83d5erLbLdo_7J95-qV-qyNWS5M-w1oQ,505
|
|
74
78
|
vibe_surf/chrome_extension/styles/variables.css,sha256=VbFJ8L76AaJUqb6gCz9jEG_V6OX4YJa65I2iyeNJIw4,1411
|
|
75
|
-
vibe_surf/controller/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
76
|
-
vibe_surf/controller/file_system.py,sha256=a2fXCzAhaC41qvV_bMLi9c50FmcFYjQ0nszSdKOdDrI,2637
|
|
77
|
-
vibe_surf/controller/mcp_client.py,sha256=OjIxx49-XyNGk5wr58m2poT56DVpfkWrVaaeBVZqLY4,2415
|
|
78
|
-
vibe_surf/controller/vibesurf_tools.py,sha256=U3gt17bEEpP0vXWHuw4QxqUcOmyUM5zap-i-GRF6_CQ,26792
|
|
79
|
-
vibe_surf/controller/views.py,sha256=BaPlvcHTy5h-Lfr0OSgR_t6ynitgzNQF4-VUJJt8Hi0,1072
|
|
80
79
|
vibe_surf/llm/__init__.py,sha256=_vDVPo6STf343p1SgMQrF5023hicAx0g83pK2Gbk4Ek,601
|
|
81
|
-
vibe_surf/llm/openai_compatible.py,sha256=
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
80
|
+
vibe_surf/llm/openai_compatible.py,sha256=uMnWcoZlBt_hMYgIkWFrwJmMH2wcswYkSLMPRcRd2dk,14854
|
|
81
|
+
vibe_surf/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
82
|
+
vibe_surf/tools/browser_use_tools.py,sha256=gWiBj-YPz7kQYi0yekuvpPQ2Z2-EBLuutF6rf71iOcM,28781
|
|
83
|
+
vibe_surf/tools/file_system.py,sha256=gVdTd6qUfoyVfZMzmX9DXTyBbfXY56jVhUqtfm1qqps,18878
|
|
84
|
+
vibe_surf/tools/mcp_client.py,sha256=OeCoTgyx4MoY7JxXndK6pGHIoyFOhf5r7XCbx25y1Ec,2446
|
|
85
|
+
vibe_surf/tools/report_writer_tools.py,sha256=sUqUFr-_Rs8RJ0Bs77Hrp07kNwRIvHv7ErzSPYSlbTg,705
|
|
86
|
+
vibe_surf/tools/vibesurf_tools.py,sha256=uSsymefr-SrVAuDtvNGsB0Am4QeTuHuL-4KJABQW8dg,29880
|
|
87
|
+
vibe_surf/tools/views.py,sha256=KwzzXXZJqyW1oyszA0Z4buDDqAm-6PXsCAB0nB7z_sQ,4218
|
|
88
|
+
vibesurf-0.1.12.dist-info/licenses/LICENSE,sha256=czn6QYya0-jhLnStD9JqnMS-hwP5wRByipkrGTvoXLI,11355
|
|
89
|
+
vibesurf-0.1.12.dist-info/METADATA,sha256=iF0JzXx8sKE_IC17rHVxvlM2jAPs04MIZk-QPifmjLI,5313
|
|
90
|
+
vibesurf-0.1.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
91
|
+
vibesurf-0.1.12.dist-info/entry_points.txt,sha256=UxqpvMocL-PR33S6vLF2OmXn-kVzM-DneMeZeHcPMM8,48
|
|
92
|
+
vibesurf-0.1.12.dist-info/top_level.txt,sha256=VPZGHqSb6EEqcJ4ZX6bHIuWfon5f6HXl3c7BYpbRqnY,10
|
|
93
|
+
vibesurf-0.1.12.dist-info/RECORD,,
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
from browser_use.filesystem.file_system import FileSystem, FileSystemError, INVALID_FILENAME_ERROR_MESSAGE
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class CustomFileSystem(FileSystem):
|
|
5
|
-
async def read_file(self, full_filename: str, external_file: bool = False) -> str:
|
|
6
|
-
"""Read file content using file-specific read method and return appropriate message to LLM"""
|
|
7
|
-
if external_file:
|
|
8
|
-
try:
|
|
9
|
-
try:
|
|
10
|
-
_, extension = self._parse_filename(full_filename)
|
|
11
|
-
except Exception:
|
|
12
|
-
return f'Error: Invalid filename format {full_filename}. Must be alphanumeric with a supported extension.'
|
|
13
|
-
if extension in ['md', 'txt', 'json', 'csv']:
|
|
14
|
-
import anyio
|
|
15
|
-
|
|
16
|
-
async with await anyio.open_file(full_filename, 'r', encoding="utf-8") as f:
|
|
17
|
-
content = await f.read()
|
|
18
|
-
return f'Read from file {full_filename}.\n<content>\n{content}\n</content>'
|
|
19
|
-
elif extension == 'pdf':
|
|
20
|
-
import pypdf
|
|
21
|
-
|
|
22
|
-
reader = pypdf.PdfReader(full_filename)
|
|
23
|
-
num_pages = len(reader.pages)
|
|
24
|
-
MAX_PDF_PAGES = 10
|
|
25
|
-
extra_pages = num_pages - MAX_PDF_PAGES
|
|
26
|
-
extracted_text = ''
|
|
27
|
-
for page in reader.pages[:MAX_PDF_PAGES]:
|
|
28
|
-
extracted_text += page.extract_text()
|
|
29
|
-
extra_pages_text = f'{extra_pages} more pages...' if extra_pages > 0 else ''
|
|
30
|
-
return f'Read from file {full_filename}.\n<content>\n{extracted_text}\n{extra_pages_text}</content>'
|
|
31
|
-
else:
|
|
32
|
-
return f'Error: Cannot read file {full_filename} as {extension} extension is not supported.'
|
|
33
|
-
except FileNotFoundError:
|
|
34
|
-
return f"Error: File '{full_filename}' not found."
|
|
35
|
-
except PermissionError:
|
|
36
|
-
return f"Error: Permission denied to read file '{full_filename}'."
|
|
37
|
-
except Exception as e:
|
|
38
|
-
return f"Error: Could not read file '{full_filename}'."
|
|
39
|
-
|
|
40
|
-
if not self._is_valid_filename(full_filename):
|
|
41
|
-
return INVALID_FILENAME_ERROR_MESSAGE
|
|
42
|
-
|
|
43
|
-
file_obj = self.get_file(full_filename)
|
|
44
|
-
if not file_obj:
|
|
45
|
-
return f"File '{full_filename}' not found."
|
|
46
|
-
|
|
47
|
-
try:
|
|
48
|
-
content = file_obj.read()
|
|
49
|
-
return f'Read from file {full_filename}.\n<content>\n{content}\n</content>'
|
|
50
|
-
except FileSystemError as e:
|
|
51
|
-
return str(e)
|
|
52
|
-
except Exception:
|
|
53
|
-
return f"Error: Could not read file '{full_filename}'."
|
vibe_surf/controller/views.py
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
from typing import Generic, TypeVar
|
|
2
|
-
from pydantic import BaseModel, ConfigDict, Field
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
class HoverAction(BaseModel):
|
|
6
|
-
"""Parameters for hover action"""
|
|
7
|
-
index: int | None = None
|
|
8
|
-
xpath: str | None = None
|
|
9
|
-
selector: str | None = None
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class ExtractionAction(BaseModel):
|
|
13
|
-
query: str = Field(
|
|
14
|
-
default="summary this page",
|
|
15
|
-
description='Extraction goal',
|
|
16
|
-
)
|
|
17
|
-
extract_links: bool | None = Field(
|
|
18
|
-
default=False,
|
|
19
|
-
description='Whether to extract links',
|
|
20
|
-
)
|
|
21
|
-
tab_id: str | None = Field(
|
|
22
|
-
default=None,
|
|
23
|
-
min_length=4,
|
|
24
|
-
max_length=4,
|
|
25
|
-
description='exact 4 character Tab ID of the tab for extraction',
|
|
26
|
-
) # last 4 chars of TargetID
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
class FileExtractionAction(BaseModel):
|
|
30
|
-
"""Parameters for file content extraction action"""
|
|
31
|
-
file_path: str = Field(
|
|
32
|
-
description='Path to the file to extract content from',
|
|
33
|
-
)
|
|
34
|
-
query: str = Field(
|
|
35
|
-
default="Extract and summarize the content from this file",
|
|
36
|
-
description='Query or instruction for content extraction',
|
|
37
|
-
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|