vibesurf 0.1.6__py3-none-any.whl → 0.1.8__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.

@@ -201,7 +201,6 @@ class VibeSurfSessionManager {
201
201
  }
202
202
 
203
203
  try {
204
- // ✅ 改进:提交新任务前先同步session的所有activity logs
205
204
  console.log('[SessionManager] 🔄 Syncing activity logs before task submission...');
206
205
  await this.syncActivityLogsFromServer();
207
206
 
@@ -343,7 +342,6 @@ class VibeSurfSessionManager {
343
342
  }
344
343
 
345
344
  try {
346
- // ✅ 使用当前logs数量作为message_index,确保获取下一个预期的log
347
345
  const requestIndex = this.activityLogs.length;
348
346
 
349
347
  console.log(`[SessionManager] 🔄 Polling activity at index ${requestIndex}, current logs: ${this.activityLogs.length}`);
@@ -506,7 +506,7 @@ class VibeSurfUIManager {
506
506
  if (this.controlPanelMinVisibilityActive) {
507
507
  console.log('[UIManager] Task completed during minimum visibility period, delaying control panel hide');
508
508
  // Wait for minimum visibility period to end before hiding
509
- const remainingTime = 2000; // Could be calculated more precisely, but 2s is reasonable
509
+ const remainingTime = 1000; // Could be calculated more precisely, but 2s is reasonable
510
510
  setTimeout(() => {
511
511
  console.log('[UIManager] Minimum visibility period respected, now hiding control panel');
512
512
  this.updateControlPanel('ready');
@@ -561,7 +561,7 @@ class VibeSurfUIManager {
561
561
  console.warn('[UIManager] Could not verify task status after error:', err);
562
562
  // If we can't verify, keep controls visible for safety
563
563
  });
564
- }, 2000);
564
+ }, 1000);
565
565
  }
566
566
 
567
567
  // Task Status Monitoring
@@ -589,7 +589,7 @@ class VibeSurfUIManager {
589
589
  // Check task status every 2 seconds
590
590
  this.taskStatusInterval = setInterval(() => {
591
591
  this.checkTaskStatus();
592
- }, 2000);
592
+ }, 500);
593
593
  }
594
594
 
595
595
  stopTaskStatusMonitoring() {
vibe_surf/cli.py CHANGED
@@ -13,6 +13,10 @@ import platform
13
13
  import importlib.util
14
14
  from pathlib import Path
15
15
  from typing import Optional
16
+ import os
17
+
18
+ # In case user has a proxy in localhost
19
+ os.environ['no_proxy'] = 'localhost,127.0.0.1,::1'
16
20
 
17
21
  try:
18
22
  from rich.console import Console
@@ -388,7 +392,9 @@ def main():
388
392
  try:
389
393
  # Display logo
390
394
  console.print(Panel(VIBESURF_LOGO, title="[bold cyan]VibeSurf CLI[/bold cyan]", border_style="cyan"))
391
- console.print("[dim]A powerful browser automation tool for vibe surfing 🏄‍♂️[/dim]\n")
395
+ console.print("[dim]A powerful browser automation tool for vibe surfing 🏄‍♂️[/dim]")
396
+ import vibe_surf
397
+ console.print(f"[dim]Version: {vibe_surf.__version__}[/dim]\n")
392
398
 
393
399
  # Check for existing browser path from configuration
394
400
  browser_path = get_browser_execution_path()
@@ -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.controller.service import Controller
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.controller.views import (
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 VibeSurfController(Controller):
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
- raise Exception(f'File not found: {file_path}')
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.register_to_controller(
530
- controller=self,
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
- @observe_debug(ignore_input=True, ignore_output=True, name='act')
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.6
3
+ Version: 0.1.8
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.6.1
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=riGXiVTWXmtdoju9hVCWvTxpszEMAAIK0sZZWoLKlnU,704
3
- vibe_surf/cli.py,sha256=2VqPZMqgFMsB9siE-16adeeCaO6RUSc2KzoIH3ZiAjQ,16912
2
+ vibe_surf/_version.py,sha256=Zaz3s9gl_rzsS46-ymJOALojMxviW77EJq_agE8knLk,704
3
+ vibe_surf/cli.py,sha256=Gy9a3JmfCdTTNJpM2-jc1fL2gczCWzqYXIZi8hngvgE,17109
4
4
  vibe_surf/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- vibe_surf/agents/browser_use_agent.py,sha256=NSSdZ9lnjtv_RyfR5Ay2rMnzJRJ-67S8Q3ytGAguiB0,50266
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=Gryoob2or2E0jhkUqutiIKw-RDJBKu5Fc5KXKtB9NiQ,70425
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=AJ_GU5krYBimWM0n0KTzJeNvm-jE4cqvLkwl91hjOKg,23140
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=ppDRRsNX8pu9Or9yADcLS8KJUTm-edrSb-nZqVThNI0,4802
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=TPH2H7Og4OxDUnjNn1nNeIJ621H4Gws5c8jkFbvZoz0,5644
33
- vibe_surf/browser/agent_browser_session.py,sha256=-o24Y0BfjPBURuQDfKlCTpOHntjx8QxqxeKxgBxs0WY,19551
34
- vibe_surf/browser/browser_manager.py,sha256=0DUouEGNCuKHV0ytWPFiQgJ5whQIVAZEk-PMbd4hTx8,12297
35
- vibe_surf/browser/utils.py,sha256=0HsQkBJKVaEP7LORtZAhdYMZD5BK4poWav-BpfbHZrE,36048
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=vmNt5iGCkWV9S6fryT14J6OvlzGwE9kbADJIc0HkB4E,14771
38
- vibe_surf/browser/watchdogs/dom_watchdog.py,sha256=XxhjQK7zQKBa1YVxvPZbgvGFeny1zUprvjCh5vRCdzk,45018
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
@@ -49,22 +49,22 @@ vibe_surf/chrome_extension/icons/logo.png,sha256=wN3iMMGtLsURA70HABtj_3jiTk9aENA
49
49
  vibe_surf/chrome_extension/scripts/api-client.js,sha256=XwKmH4lP5eAkBqAM8EcQezI0gcMZK8l0RQ3ESEamcn8,13318
50
50
  vibe_surf/chrome_extension/scripts/main.js,sha256=WhmCGktQoSl7aaMl8a9ysJJiysAjf12bWGypMucCSVg,16913
51
51
  vibe_surf/chrome_extension/scripts/markdown-it.min.js,sha256=gZ3xe0BdCJplNiHWTKrm6AGZydPy34jJKZqFIf-7hIw,102948
52
- vibe_surf/chrome_extension/scripts/session-manager.js,sha256=VZNz887QHcfXaCD1EhCaK_YxaVRDXk8cMyQzAUsoYBw,19583
53
- vibe_surf/chrome_extension/scripts/ui-manager.js,sha256=OB3whsiysgVbB_jMDc_xdLHRqm87dfO_KZYHY04hxK0,142440
52
+ vibe_surf/chrome_extension/scripts/session-manager.js,sha256=Bt5lLE6obU23nsU-EjXaD0zdse2p5pg5N_aR8zb5u_Q,19413
53
+ vibe_surf/chrome_extension/scripts/ui-manager.js,sha256=p91DIGpE5VS83T17Skuba827SAwC8IAxvCX-zrlAafw,142439
54
54
  vibe_surf/chrome_extension/styles/animations.css,sha256=TLAet_xXBxCA-H36BWP4xBGBIVjbDdAj7Q6OPxPsbE8,7891
55
55
  vibe_surf/chrome_extension/styles/components.css,sha256=7K6khbJcONVAArfeS4qmPBUJxvGGs20-eEw62bD_7VI,14741
56
56
  vibe_surf/chrome_extension/styles/main.css,sha256=Z5cIBkE6zJTQ2wvyhWXEqIubsMiwvnZib1p1-GARdeI,48219
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=CHjRjk3tDLltTKIzdmPB5SYN5pfgnkEoIzofOc8mw_A,2643
61
- vibe_surf/controller/vibesurf_controller.py,sha256=UWz8SvOAHr9KG8tn4nTciZvt3JkxYlYIhocA36BKobI,28418
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.6.dist-info/licenses/LICENSE,sha256=czn6QYya0-jhLnStD9JqnMS-hwP5wRByipkrGTvoXLI,11355
66
- vibesurf-0.1.6.dist-info/METADATA,sha256=DOmjF0Grk_xlnXuHAqWq25D4EcTSQ_XMOclXsMDTdtc,3851
67
- vibesurf-0.1.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
68
- vibesurf-0.1.6.dist-info/entry_points.txt,sha256=UxqpvMocL-PR33S6vLF2OmXn-kVzM-DneMeZeHcPMM8,48
69
- vibesurf-0.1.6.dist-info/top_level.txt,sha256=VPZGHqSb6EEqcJ4ZX6bHIuWfon5f6HXl3c7BYpbRqnY,10
70
- vibesurf-0.1.6.dist-info/RECORD,,
65
+ vibesurf-0.1.8.dist-info/licenses/LICENSE,sha256=czn6QYya0-jhLnStD9JqnMS-hwP5wRByipkrGTvoXLI,11355
66
+ vibesurf-0.1.8.dist-info/METADATA,sha256=RCQXq45W_9ZZzV8JIMsU45-LQjNZ2jNHFHFfwnw-mJM,4113
67
+ vibesurf-0.1.8.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
68
+ vibesurf-0.1.8.dist-info/entry_points.txt,sha256=UxqpvMocL-PR33S6vLF2OmXn-kVzM-DneMeZeHcPMM8,48
69
+ vibesurf-0.1.8.dist-info/top_level.txt,sha256=VPZGHqSb6EEqcJ4ZX6bHIuWfon5f6HXl3c7BYpbRqnY,10
70
+ vibesurf-0.1.8.dist-info/RECORD,,