vibesurf 0.1.7__py3-none-any.whl → 0.1.9__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 +48 -154
- vibe_surf/agents/vibe_surf_agent.py +10 -9
- vibe_surf/backend/shared_state.py +1 -1
- vibe_surf/backend/utils/encryption.py +5 -35
- vibe_surf/browser/agen_browser_profile.py +3 -4
- vibe_surf/browser/agent_browser_session.py +115 -52
- vibe_surf/browser/browser_manager.py +2 -2
- vibe_surf/browser/utils.py +8 -15
- vibe_surf/browser/watchdogs/action_watchdog.py +8 -194
- vibe_surf/browser/watchdogs/dom_watchdog.py +3 -675
- vibe_surf/cli.py +9 -2
- vibe_surf/controller/mcp_client.py +0 -4
- vibe_surf/controller/{vibesurf_controller.py → vibesurf_tools.py} +13 -48
- {vibesurf-0.1.7.dist-info → vibesurf-0.1.9.dist-info}/METADATA +8 -3
- {vibesurf-0.1.7.dist-info → vibesurf-0.1.9.dist-info}/RECORD +20 -20
- {vibesurf-0.1.7.dist-info → vibesurf-0.1.9.dist-info}/WHEEL +0 -0
- {vibesurf-0.1.7.dist-info → vibesurf-0.1.9.dist-info}/entry_points.txt +0 -0
- {vibesurf-0.1.7.dist-info → vibesurf-0.1.9.dist-info}/licenses/LICENSE +0 -0
- {vibesurf-0.1.7.dist-info → vibesurf-0.1.9.dist-info}/top_level.txt +0 -0
vibe_surf/cli.py
CHANGED
|
@@ -297,8 +297,15 @@ def configure_extension_path() -> str:
|
|
|
297
297
|
console.print(f"[green]✅ Using extension from environment: {env_extension}[/green]")
|
|
298
298
|
return env_extension
|
|
299
299
|
|
|
300
|
-
#
|
|
301
|
-
|
|
300
|
+
# Check if running in PyInstaller frozen environment
|
|
301
|
+
if getattr(sys, 'frozen', False):
|
|
302
|
+
# PyInstaller frozen environment
|
|
303
|
+
bundle_dir = Path(sys._MEIPASS)
|
|
304
|
+
default_extension = bundle_dir / "vibe_surf" / "chrome_extension"
|
|
305
|
+
console.print(f"[cyan]📦 Detected packaged environment, using bundled extension[/cyan]")
|
|
306
|
+
else:
|
|
307
|
+
# Development environment
|
|
308
|
+
default_extension = Path(__file__).parent / "chrome_extension"
|
|
302
309
|
|
|
303
310
|
if default_extension.exists():
|
|
304
311
|
extension_path = str(default_extension.resolve())
|
|
@@ -3,11 +3,7 @@ import logging
|
|
|
3
3
|
import time
|
|
4
4
|
from typing import Any
|
|
5
5
|
|
|
6
|
-
from pydantic import BaseModel, ConfigDict, Field, create_model
|
|
7
6
|
|
|
8
|
-
from browser_use.agent.views import ActionResult
|
|
9
|
-
from browser_use.controller.registry.service import Registry
|
|
10
|
-
from browser_use.controller.service import Controller
|
|
11
7
|
from browser_use.telemetry import MCPClientTelemetryEvent, ProductTelemetry
|
|
12
8
|
from browser_use.utils import get_browser_use_version
|
|
13
9
|
from browser_use.mcp.client import MCPClient
|
|
@@ -8,7 +8,7 @@ import mimetypes
|
|
|
8
8
|
|
|
9
9
|
from typing import Optional, Type, Callable, Dict, Any, Union, Awaitable, TypeVar
|
|
10
10
|
from pydantic import BaseModel
|
|
11
|
-
from browser_use.
|
|
11
|
+
from browser_use.tools.service import Controller, Tools
|
|
12
12
|
import logging
|
|
13
13
|
from browser_use.agent.views import ActionModel, ActionResult
|
|
14
14
|
from browser_use.utils import time_execution_sync
|
|
@@ -16,7 +16,7 @@ from browser_use.filesystem.file_system import FileSystem
|
|
|
16
16
|
from browser_use.browser import BrowserSession
|
|
17
17
|
from browser_use.browser.events import UploadFileEvent
|
|
18
18
|
from browser_use.observability import observe_debug
|
|
19
|
-
from browser_use.
|
|
19
|
+
from browser_use.tools.views import (
|
|
20
20
|
ClickElementAction,
|
|
21
21
|
CloseTabAction,
|
|
22
22
|
DoneAction,
|
|
@@ -50,7 +50,7 @@ Context = TypeVar('Context')
|
|
|
50
50
|
T = TypeVar('T', bound=BaseModel)
|
|
51
51
|
|
|
52
52
|
|
|
53
|
-
class
|
|
53
|
+
class VibeSurfTools(Tools):
|
|
54
54
|
def __init__(self,
|
|
55
55
|
exclude_actions: list[str] = [],
|
|
56
56
|
output_model: type[T] | None = None,
|
|
@@ -360,6 +360,11 @@ Provide the extracted information in a clear, structured format."""
|
|
|
360
360
|
|
|
361
361
|
@self.registry.action('Read file_name from file system. If this is a file not in Current workspace dir or with a absolute path, Set external_file=True.')
|
|
362
362
|
async def read_file(file_name: str, external_file: bool, file_system: FileSystem):
|
|
363
|
+
if not os.path.exists(file_name):
|
|
364
|
+
# if not exists, assume it is external_file
|
|
365
|
+
external_file = True
|
|
366
|
+
else:
|
|
367
|
+
external_file = False
|
|
363
368
|
result = await file_system.read_file(file_name, external_file=external_file)
|
|
364
369
|
|
|
365
370
|
MAX_MEMORY_SIZE = 1000
|
|
@@ -397,10 +402,10 @@ Provide the extracted information in a clear, structured format."""
|
|
|
397
402
|
try:
|
|
398
403
|
# Get file path
|
|
399
404
|
file_path = params.file_path
|
|
400
|
-
|
|
405
|
+
|
|
401
406
|
# Check if file exists
|
|
402
407
|
if not os.path.exists(file_path):
|
|
403
|
-
|
|
408
|
+
file_path = os.path.join(file_system.get_dir(), file_path)
|
|
404
409
|
|
|
405
410
|
# Determine if file is an image based on MIME type
|
|
406
411
|
mime_type, _ = mimetypes.guess_type(file_path)
|
|
@@ -526,8 +531,8 @@ Provide the extracted information in a clear, structured format."""
|
|
|
526
531
|
|
|
527
532
|
# Register tools to controller with prefix
|
|
528
533
|
prefix = f"mcp.{server_name}."
|
|
529
|
-
await client.
|
|
530
|
-
|
|
534
|
+
await client.register_to_tools(
|
|
535
|
+
tools=self,
|
|
531
536
|
prefix=prefix
|
|
532
537
|
)
|
|
533
538
|
|
|
@@ -573,44 +578,4 @@ Provide the extracted information in a clear, structured format."""
|
|
|
573
578
|
self.mcp_clients.clear()
|
|
574
579
|
logger.info('All MCP clients unregistered and disconnected')
|
|
575
580
|
|
|
576
|
-
|
|
577
|
-
@time_execution_sync('--act')
|
|
578
|
-
async def act(
|
|
579
|
-
self,
|
|
580
|
-
action: ActionModel,
|
|
581
|
-
browser_session: BrowserSession| None = None,
|
|
582
|
-
#
|
|
583
|
-
page_extraction_llm: BaseChatModel | None = None,
|
|
584
|
-
sensitive_data: dict[str, str | dict[str, str]] | None = None,
|
|
585
|
-
available_file_paths: list[str] | None = None,
|
|
586
|
-
file_system: FileSystem | None = None,
|
|
587
|
-
#
|
|
588
|
-
context: Context | None = None,
|
|
589
|
-
) -> ActionResult:
|
|
590
|
-
"""Execute an action"""
|
|
591
|
-
|
|
592
|
-
for action_name, params in action.model_dump(exclude_unset=True).items():
|
|
593
|
-
if params is not None:
|
|
594
|
-
try:
|
|
595
|
-
result = await self.registry.execute_action(
|
|
596
|
-
action_name=action_name,
|
|
597
|
-
params=params,
|
|
598
|
-
browser_session=browser_session,
|
|
599
|
-
page_extraction_llm=page_extraction_llm,
|
|
600
|
-
file_system=file_system,
|
|
601
|
-
sensitive_data=sensitive_data,
|
|
602
|
-
available_file_paths=available_file_paths,
|
|
603
|
-
context=context,
|
|
604
|
-
)
|
|
605
|
-
except Exception as e:
|
|
606
|
-
result = ActionResult(error=str(e))
|
|
607
|
-
|
|
608
|
-
if isinstance(result, str):
|
|
609
|
-
return ActionResult(extracted_content=result)
|
|
610
|
-
elif isinstance(result, ActionResult):
|
|
611
|
-
return result
|
|
612
|
-
elif result is None:
|
|
613
|
-
return ActionResult()
|
|
614
|
-
else:
|
|
615
|
-
raise ValueError(f'Invalid action result type: {type(result)} of {result}')
|
|
616
|
-
return ActionResult()
|
|
581
|
+
VibeSurfController = VibeSurfTools
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: vibesurf
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.9
|
|
4
4
|
Summary: VibeSurf: A powerful browser assistant for vibe surfing
|
|
5
5
|
Author: Shao Warm
|
|
6
6
|
License: Apache-2.0
|
|
@@ -26,7 +26,7 @@ Requires-Dist: json-repair>=0.48.0
|
|
|
26
26
|
Requires-Dist: aiohttp>=3.12.15
|
|
27
27
|
Requires-Dist: scikit-image>=0.25.2
|
|
28
28
|
Requires-Dist: python-socks>=2.7.2
|
|
29
|
-
Requires-Dist: browser-use==0.
|
|
29
|
+
Requires-Dist: browser-use==0.7.1
|
|
30
30
|
Requires-Dist: langgraph>=0.6.4
|
|
31
31
|
Requires-Dist: fastapi>=0.104.0
|
|
32
32
|
Requires-Dist: uvicorn[standard]>=0.24.0
|
|
@@ -37,6 +37,7 @@ Requires-Dist: sqlalchemy>=2.0.43
|
|
|
37
37
|
Requires-Dist: aiosqlite>=0.21.0
|
|
38
38
|
Requires-Dist: rich>=13.0.0
|
|
39
39
|
Requires-Dist: greenlet>=3.2.4
|
|
40
|
+
Requires-Dist: getmac>=0.9.5
|
|
40
41
|
Dynamic: license-file
|
|
41
42
|
|
|
42
43
|
# VibeSurf: A powerful browser assistant for vibe surfing
|
|
@@ -75,7 +76,7 @@ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | ie
|
|
|
75
76
|
### Step 2: Setup and Install
|
|
76
77
|
```bash
|
|
77
78
|
uv venv --python 3.12
|
|
78
|
-
uv pip install vibesurf
|
|
79
|
+
uv pip install vibesurf -U
|
|
79
80
|
```
|
|
80
81
|
|
|
81
82
|
### Step 3: Launch
|
|
@@ -85,8 +86,12 @@ vibesurf
|
|
|
85
86
|
|
|
86
87
|
## 🎬 Demo
|
|
87
88
|
|
|
89
|
+
### How to use?
|
|
88
90
|
<video src="https://github.com/user-attachments/assets/0a4650c0-c4ed-423e-9e16-7889e9f9816d" controls="controls">Your browser does not support playing this video!</video>
|
|
89
91
|
|
|
92
|
+
### Dozens of agent running in on browser
|
|
93
|
+
<video src="https://github.com/user-attachments/assets/9c461a6e-5d97-4335-ba09-59e8ec4ad47b" controls="controls">Your browser does not support playing this video!</video>
|
|
94
|
+
|
|
90
95
|
|
|
91
96
|
## 📝 License
|
|
92
97
|
|
|
@@ -1,16 +1,16 @@
|
|
|
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=ib8ckvf-NNDfacXd8unW0p5cf-gl57XyQvjoEMc_pvc,704
|
|
3
|
+
vibe_surf/cli.py,sha256=rrGhAQijq6y36QFJ7dEPFeCDaqvZtOE5yVYnNEuhRiI,17439
|
|
4
4
|
vibe_surf/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
|
-
vibe_surf/agents/browser_use_agent.py,sha256=
|
|
5
|
+
vibe_surf/agents/browser_use_agent.py,sha256=5NXZCQphHKlyNtLjhwG9ezBXFIo91ZnlFPRhUye7c3U,45202
|
|
6
6
|
vibe_surf/agents/report_writer_agent.py,sha256=E5mSirewzH4Oyv385-Nn2Mf1Ug3OCVBz99PoTbvKRfQ,13860
|
|
7
|
-
vibe_surf/agents/vibe_surf_agent.py,sha256=
|
|
7
|
+
vibe_surf/agents/vibe_surf_agent.py,sha256=bl0Xl9Aw3qFvKGlWA6ctrWF5Y09DDadGfNaY524T_yQ,70370
|
|
8
8
|
vibe_surf/agents/prompts/__init__.py,sha256=l4ieA0D8kLJthyNN85FKLNe4ExBa3stY3l-aImLDRD0,36
|
|
9
9
|
vibe_surf/agents/prompts/vibe_surf_prompt.py,sha256=u-6KgLSnBbQohS5kiLZDcZ3aoT90ScVONXi9gNvdMoo,11006
|
|
10
10
|
vibe_surf/backend/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
11
|
vibe_surf/backend/llm_config.py,sha256=9V8Gg065TQALbOKQnOqFWd8RzOJjegOD8w6YOf90Q7Y,5036
|
|
12
12
|
vibe_surf/backend/main.py,sha256=Y1xZJNBjOhgOjNegmetZj9AGUIn2ft10FSCCvMl4XRo,4047
|
|
13
|
-
vibe_surf/backend/shared_state.py,sha256=
|
|
13
|
+
vibe_surf/backend/shared_state.py,sha256=yTGyojod0k3Y4ZxtKr4l75ewLAyvnLtAR43nbbSCryU,23135
|
|
14
14
|
vibe_surf/backend/api/__init__.py,sha256=XxF1jUOORpLYCfFuPrrnUGRnOrr6ClH0_MNPU-4RnSs,68
|
|
15
15
|
vibe_surf/backend/api/activity.py,sha256=NRSTsN3JnE63kDFhfgH3rmC9qxAeIaMKUqbXrOuZlSQ,9364
|
|
16
16
|
vibe_surf/backend/api/config.py,sha256=9yTip3L0dBCy8jP6MqbpX_hk1Zk8KYrR-W18R0i7wjI,27091
|
|
@@ -26,16 +26,16 @@ vibe_surf/backend/migrations/__init__.py,sha256=dLhZwW6AGyfBSid-QJPCpIlS4DnYDvO8
|
|
|
26
26
|
vibe_surf/backend/migrations/init_db.py,sha256=pY2Yq7K1vPxqT8r3jlAQcYEQWK-GGbb0F7W5asGpuew,10399
|
|
27
27
|
vibe_surf/backend/migrations/seed_data.py,sha256=L6Ll-u8P4cICAUlD5y9urQPSUld6M67erSBCEIdw8Uc,8239
|
|
28
28
|
vibe_surf/backend/utils/__init__.py,sha256=V8leMFp7apAglUAoCHPZrNNcRHthSLYIudIJE5qwjb0,184
|
|
29
|
-
vibe_surf/backend/utils/encryption.py,sha256=
|
|
29
|
+
vibe_surf/backend/utils/encryption.py,sha256=JBl0olXQ-tESvZywuhGvy57soLhFw4ZKnbXWMWpgimg,3720
|
|
30
30
|
vibe_surf/backend/utils/llm_factory.py,sha256=4oHaKpizqA069dcXm0iK5G1SS-fhhOY5l6cM3SCFmwE,9172
|
|
31
31
|
vibe_surf/browser/__init__.py,sha256=_UToO2fZfSCrfjOcxhn4Qq7ZLbYeyPuUUEmqIva-Yv8,325
|
|
32
|
-
vibe_surf/browser/agen_browser_profile.py,sha256=
|
|
33
|
-
vibe_surf/browser/agent_browser_session.py,sha256
|
|
34
|
-
vibe_surf/browser/browser_manager.py,sha256=
|
|
35
|
-
vibe_surf/browser/utils.py,sha256=
|
|
32
|
+
vibe_surf/browser/agen_browser_profile.py,sha256=4H4qDjqLqHAfMi3niBI9fd0S1GlVDWYDUUOrEQoNkl8,5677
|
|
33
|
+
vibe_surf/browser/agent_browser_session.py,sha256=KGRl2AtNy0gt0Edfr9ShKqCb68qT4pT9jl0s5ZLN098,22250
|
|
34
|
+
vibe_surf/browser/browser_manager.py,sha256=38lF723AH44rBShl62P34GIDvxvcK4oy57IXyjqHDXs,12275
|
|
35
|
+
vibe_surf/browser/utils.py,sha256=Um_hTZgDH4gL-cCKSeUBMEqPLVForCMYp1nN7ugD5co,35704
|
|
36
36
|
vibe_surf/browser/watchdogs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
|
-
vibe_surf/browser/watchdogs/action_watchdog.py,sha256=
|
|
38
|
-
vibe_surf/browser/watchdogs/dom_watchdog.py,sha256=
|
|
37
|
+
vibe_surf/browser/watchdogs/action_watchdog.py,sha256=6lM0nOR67clLzC6nVEMZ2Vam8VHDW8GRlg_jbGUHbPk,5297
|
|
38
|
+
vibe_surf/browser/watchdogs/dom_watchdog.py,sha256=leohqqM9loMbmqobtOMxPSsM2IrK9jyu-xYCSfXIiCA,13045
|
|
39
39
|
vibe_surf/chrome_extension/background.js,sha256=P99qkisiN_Zsn8bu_9dWeXyK8CQthLD9FaGG2z1SMDU,16282
|
|
40
40
|
vibe_surf/chrome_extension/config.js,sha256=g53UkfsaOFNC6fZG-THlBxdSjvswPsaQ9w8rxiHNq2E,1093
|
|
41
41
|
vibe_surf/chrome_extension/content.js,sha256=q6JRpmHAEdPWNnFSIqoPv8eBm0T574c3H5hp-M4LYlc,8027
|
|
@@ -57,14 +57,14 @@ vibe_surf/chrome_extension/styles/main.css,sha256=Z5cIBkE6zJTQ2wvyhWXEqIubsMiwvn
|
|
|
57
57
|
vibe_surf/chrome_extension/styles/settings.css,sha256=oKyLUiRsxW92f9VNkYwGkn7TNaXvjG0NPY2sxtYz5vo,20464
|
|
58
58
|
vibe_surf/controller/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
59
59
|
vibe_surf/controller/file_system.py,sha256=a2fXCzAhaC41qvV_bMLi9c50FmcFYjQ0nszSdKOdDrI,2637
|
|
60
|
-
vibe_surf/controller/mcp_client.py,sha256=
|
|
61
|
-
vibe_surf/controller/
|
|
60
|
+
vibe_surf/controller/mcp_client.py,sha256=OjIxx49-XyNGk5wr58m2poT56DVpfkWrVaaeBVZqLY4,2415
|
|
61
|
+
vibe_surf/controller/vibesurf_tools.py,sha256=ynX-IWeFBIS2DzyYP1ZkFOM5nl5O2iTdB93HboOyxbs,26848
|
|
62
62
|
vibe_surf/controller/views.py,sha256=BaPlvcHTy5h-Lfr0OSgR_t6ynitgzNQF4-VUJJt8Hi0,1072
|
|
63
63
|
vibe_surf/llm/__init__.py,sha256=_vDVPo6STf343p1SgMQrF5023hicAx0g83pK2Gbk4Ek,601
|
|
64
64
|
vibe_surf/llm/openai_compatible.py,sha256=oY32VZF4oDS6ZG0h1WGtqAlWzdlximlJVTw8e8p5Zrg,10175
|
|
65
|
-
vibesurf-0.1.
|
|
66
|
-
vibesurf-0.1.
|
|
67
|
-
vibesurf-0.1.
|
|
68
|
-
vibesurf-0.1.
|
|
69
|
-
vibesurf-0.1.
|
|
70
|
-
vibesurf-0.1.
|
|
65
|
+
vibesurf-0.1.9.dist-info/licenses/LICENSE,sha256=czn6QYya0-jhLnStD9JqnMS-hwP5wRByipkrGTvoXLI,11355
|
|
66
|
+
vibesurf-0.1.9.dist-info/METADATA,sha256=Dz-gKRF8C7uGSBcGGgDkcSESdI_ol-eE2uTjM4oNuFg,4113
|
|
67
|
+
vibesurf-0.1.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
68
|
+
vibesurf-0.1.9.dist-info/entry_points.txt,sha256=UxqpvMocL-PR33S6vLF2OmXn-kVzM-DneMeZeHcPMM8,48
|
|
69
|
+
vibesurf-0.1.9.dist-info/top_level.txt,sha256=VPZGHqSb6EEqcJ4ZX6bHIuWfon5f6HXl3c7BYpbRqnY,10
|
|
70
|
+
vibesurf-0.1.9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|