vibesurf 0.1.10__tar.gz → 0.1.11__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 vibesurf might be problematic. Click here for more details.
- {vibesurf-0.1.10 → vibesurf-0.1.11}/.env.example +1 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/PKG-INFO +6 -2
- {vibesurf-0.1.10 → vibesurf-0.1.11}/pyproject.toml +6 -2
- {vibesurf-0.1.10 → vibesurf-0.1.11}/tests/test_agents.py +53 -60
- {vibesurf-0.1.10 → vibesurf-0.1.11}/tests/test_backend_api.py +10 -10
- vibesurf-0.1.10/tests/test_controller.py → vibesurf-0.1.11/tests/test_tools.py +30 -11
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/_version.py +3 -3
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/agents/browser_use_agent.py +68 -45
- vibesurf-0.1.11/vibe_surf/agents/prompts/report_writer_prompt.py +73 -0
- vibesurf-0.1.11/vibe_surf/agents/prompts/vibe_surf_prompt.py +89 -0
- vibesurf-0.1.11/vibe_surf/agents/report_writer_agent.py +530 -0
- vibesurf-0.1.11/vibe_surf/agents/vibe_surf_agent.py +1711 -0
- vibesurf-0.1.11/vibe_surf/agents/views.py +130 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/backend/api/activity.py +3 -1
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/backend/api/browser.py +9 -5
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/backend/api/config.py +8 -5
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/backend/api/files.py +59 -50
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/backend/api/models.py +2 -2
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/backend/api/task.py +45 -12
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/backend/database/manager.py +24 -18
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/backend/database/queries.py +199 -192
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/backend/database/schemas.py +1 -1
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/backend/main.py +4 -2
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/backend/shared_state.py +28 -35
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/backend/utils/encryption.py +3 -1
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/backend/utils/llm_factory.py +41 -36
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/browser/agent_browser_session.py +0 -4
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/browser/browser_manager.py +14 -8
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/browser/utils.py +5 -3
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/browser/watchdogs/dom_watchdog.py +0 -45
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/background.js +4 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/scripts/api-client.js +13 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/scripts/file-manager.js +27 -71
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/scripts/session-manager.js +21 -3
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/scripts/ui-manager.js +831 -48
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/sidepanel.html +21 -4
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/styles/activity.css +365 -5
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/styles/input.css +139 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/cli.py +4 -22
- vibesurf-0.1.11/vibe_surf/common.py +35 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/llm/openai_compatible.py +148 -93
- vibesurf-0.1.11/vibe_surf/logger.py +99 -0
- vibesurf-0.1.10/vibe_surf/controller/vibesurf_tools.py → vibesurf-0.1.11/vibe_surf/tools/browser_use_tools.py +233 -219
- vibesurf-0.1.11/vibe_surf/tools/file_system.py +415 -0
- {vibesurf-0.1.10/vibe_surf/controller → vibesurf-0.1.11/vibe_surf/tools}/mcp_client.py +4 -3
- vibesurf-0.1.11/vibe_surf/tools/report_writer_tools.py +21 -0
- vibesurf-0.1.11/vibe_surf/tools/vibesurf_tools.py +657 -0
- vibesurf-0.1.11/vibe_surf/tools/views.py +120 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibesurf.egg-info/PKG-INFO +6 -2
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibesurf.egg-info/SOURCES.txt +23 -11
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibesurf.egg-info/requires.txt +5 -1
- vibesurf-0.1.10/vibe_surf/agents/prompts/vibe_surf_prompt.py +0 -176
- vibesurf-0.1.10/vibe_surf/agents/report_writer_agent.py +0 -376
- vibesurf-0.1.10/vibe_surf/agents/vibe_surf_agent.py +0 -1657
- vibesurf-0.1.10/vibe_surf/controller/file_system.py +0 -53
- vibesurf-0.1.10/vibe_surf/controller/views.py +0 -37
- {vibesurf-0.1.10 → vibesurf-0.1.11}/.github/workflows/publish.yml +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/.gitignore +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/.python-version +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/LICENSE +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/MANIFEST.in +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/README.md +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/docs/EXECUTABLE_BUILD.md +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/docs/PYPI_SETUP.md +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/scripts/build-local.bat +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/scripts/build-local.sh +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/setup.cfg +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/tests/test_browser.py +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/__init__.py +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/agents/__init__.py +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/agents/prompts/__init__.py +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/backend/__init__.py +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/backend/api/__init__.py +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/backend/database/__init__.py +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/backend/database/models.py +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/backend/llm_config.py +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/backend/migrations/__init__.py +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/backend/migrations/init_db.py +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/backend/migrations/seed_data.py +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/backend/utils/__init__.py +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/browser/__init__.py +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/browser/agen_browser_profile.py +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/browser/watchdogs/__init__.py +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/browser/watchdogs/action_watchdog.py +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/config.js +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/content.js +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/dev-reload.js +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/icons/convert-svg.js +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/icons/logo-preview.html +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/icons/logo.icns +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/icons/logo.png +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/manifest.json +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/popup.html +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/scripts/history-manager.js +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/scripts/main.js +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/scripts/markdown-it.min.js +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/scripts/modal-manager.js +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/scripts/settings-manager.js +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/styles/animations.css +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/styles/base.css +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/styles/components.css +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/styles/history-modal.css +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/styles/layout.css +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/styles/responsive.css +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/styles/settings-environment.css +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/styles/settings-forms.css +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/styles/settings-modal.css +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/styles/settings-profiles.css +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/styles/settings-responsive.css +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/styles/settings-utilities.css +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/chrome_extension/styles/variables.css +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibe_surf/llm/__init__.py +0 -0
- {vibesurf-0.1.10/vibe_surf/controller → vibesurf-0.1.11/vibe_surf/tools}/__init__.py +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibesurf.egg-info/dependency_links.txt +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibesurf.egg-info/entry_points.txt +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibesurf.egg-info/top_level.txt +0 -0
- {vibesurf-0.1.10 → vibesurf-0.1.11}/vibesurf.spec +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: vibesurf
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.11
|
|
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
|
|
@@ -38,7 +38,11 @@ dependencies = [
|
|
|
38
38
|
"rich>=13.0.0",
|
|
39
39
|
"greenlet>=3.2.4",
|
|
40
40
|
"getmac>=0.9.5",
|
|
41
|
-
"browser-use==0.7.
|
|
41
|
+
"browser-use==0.7.7",
|
|
42
|
+
"markdown-pdf>=1.9",
|
|
43
|
+
"nanoid>=2.0.0",
|
|
44
|
+
"markdownify>=1.2.0",
|
|
45
|
+
"pathvalidate>=3.3.1",
|
|
42
46
|
]
|
|
43
47
|
|
|
44
48
|
[project.urls]
|
|
@@ -58,7 +62,7 @@ packages = [
|
|
|
58
62
|
"vibe_surf.agents.prompts",
|
|
59
63
|
"vibe_surf.browser",
|
|
60
64
|
"vibe_surf.browser.watchdogs",
|
|
61
|
-
"vibe_surf.
|
|
65
|
+
"vibe_surf.tools",
|
|
62
66
|
"vibe_surf.llm",
|
|
63
67
|
"vibe_surf.backend"
|
|
64
68
|
]
|
|
@@ -14,7 +14,9 @@ from vibe_surf.browser.browser_manager import BrowserManager
|
|
|
14
14
|
from vibe_surf.browser.agent_browser_session import AgentBrowserSession
|
|
15
15
|
|
|
16
16
|
from vibe_surf.browser.agent_browser_session import AgentBrowserSession
|
|
17
|
-
from vibe_surf.
|
|
17
|
+
from vibe_surf.browser.agen_browser_profile import AgentBrowserProfile
|
|
18
|
+
from vibe_surf.tools.browser_use_tools import BrowserUseTools
|
|
19
|
+
from vibe_surf.tools.vibesurf_tools import VibeSurfTools
|
|
18
20
|
from vibe_surf.llm.openai_compatible import ChatOpenAICompatible
|
|
19
21
|
from vibe_surf.agents.browser_use_agent import BrowserUseAgent
|
|
20
22
|
from vibe_surf.agents.vibe_surf_agent import VibeSurfAgent
|
|
@@ -25,7 +27,7 @@ async def run_single_bu_agent():
|
|
|
25
27
|
browser_exec_path = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
|
|
26
28
|
else:
|
|
27
29
|
browser_exec_path = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
|
|
28
|
-
browser_profile =
|
|
30
|
+
browser_profile = AgentBrowserProfile(
|
|
29
31
|
executable_path=browser_exec_path,
|
|
30
32
|
user_data_dir=os.path.abspath('./tmp/chrome/profiles/default'),
|
|
31
33
|
headless=False,
|
|
@@ -34,24 +36,24 @@ async def run_single_bu_agent():
|
|
|
34
36
|
# Use SwarmBrowserSession instead of BrowserSession to disable DVD animation
|
|
35
37
|
main_browser_session = AgentBrowserSession(browser_profile=browser_profile)
|
|
36
38
|
await main_browser_session.start()
|
|
37
|
-
|
|
39
|
+
bu_tools = BrowserUseTools()
|
|
38
40
|
|
|
39
|
-
llm = ChatOpenAICompatible(model='gemini-2.5-
|
|
41
|
+
llm = ChatOpenAICompatible(model='gemini-2.5-flash',
|
|
40
42
|
base_url=os.getenv("OPENAI_ENDPOINT"),
|
|
41
43
|
api_key=os.getenv("OPENAI_API_KEY"))
|
|
42
|
-
|
|
43
|
-
task = r"""
|
|
44
|
-
1. 在新的tab 导航到 https://github.com/
|
|
45
|
-
2. 在新的tab 导航到 https://vibemotion.co/
|
|
46
|
-
3. 在新的tab 导航到 https://browser-use.com/
|
|
47
|
-
4. 分别总结所有tab的内容(在一步中使用parallel的extract操作, 不要分开三步),然后保存到 tabs_summary.txt
|
|
48
|
-
"""
|
|
44
|
+
task = "Search Google for 'Elon Mask' and tell me the top 3 results"
|
|
45
|
+
# task = r"""
|
|
46
|
+
# 1. 在新的tab 导航到 https://github.com/
|
|
47
|
+
# 2. 在新的tab 导航到 https://vibemotion.co/
|
|
48
|
+
# 3. 在新的tab 导航到 https://browser-use.com/
|
|
49
|
+
# 4. 分别总结所有tab的内容(在一步中使用parallel的extract操作, 不要分开三步),然后保存到 tabs_summary.txt
|
|
50
|
+
# """
|
|
49
51
|
agent = BrowserUseAgent(task=task,
|
|
50
52
|
llm=llm,
|
|
51
53
|
browser_session=main_browser_session,
|
|
52
|
-
|
|
54
|
+
tools=bu_tools,
|
|
53
55
|
task_id=main_browser_session.id,
|
|
54
|
-
file_system_path="./tmp/
|
|
56
|
+
file_system_path="./tmp/single_bu_tests")
|
|
55
57
|
history = await agent.run()
|
|
56
58
|
print(history.final_result())
|
|
57
59
|
await main_browser_session.kill()
|
|
@@ -63,7 +65,7 @@ async def run_multi_bu_agents():
|
|
|
63
65
|
browser_exec_path = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
|
|
64
66
|
else:
|
|
65
67
|
browser_exec_path = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
|
|
66
|
-
browser_profile =
|
|
68
|
+
browser_profile = AgentBrowserProfile(
|
|
67
69
|
executable_path=browser_exec_path,
|
|
68
70
|
user_data_dir=os.path.abspath('./tmp/chrome/profiles/default'),
|
|
69
71
|
headless=False,
|
|
@@ -82,12 +84,15 @@ async def run_multi_bu_agents():
|
|
|
82
84
|
}
|
|
83
85
|
}
|
|
84
86
|
# Use SwarmBrowserSession instead of BrowserSession to disable DVD animation
|
|
87
|
+
# Use SwarmBrowserSession instead of BrowserSession to disable DVD animation
|
|
85
88
|
main_browser_session = AgentBrowserSession(browser_profile=browser_profile)
|
|
86
89
|
await main_browser_session.start()
|
|
90
|
+
bu_tools = BrowserUseTools()
|
|
87
91
|
browser_manager = BrowserManager(main_browser_session=main_browser_session)
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
llm = ChatOpenAICompatible(model='gemini-2.5-flash',
|
|
92
|
+
# await tools.register_mcp_clients(mcp_server_config)
|
|
93
|
+
|
|
94
|
+
llm = ChatOpenAICompatible(model='gemini-2.5-flash',
|
|
95
|
+
base_url=os.getenv("OPENAI_ENDPOINT"),
|
|
91
96
|
api_key=os.getenv("OPENAI_API_KEY"))
|
|
92
97
|
agent_browser_sessions = await asyncio.gather(
|
|
93
98
|
browser_manager.register_agent("agent-1"),
|
|
@@ -98,8 +103,8 @@ async def run_multi_bu_agents():
|
|
|
98
103
|
BrowserUseAgent(task=task,
|
|
99
104
|
llm=llm,
|
|
100
105
|
browser_session=agent_browser_sessions[i],
|
|
101
|
-
|
|
102
|
-
file_system_path="./tmp/
|
|
106
|
+
tools=bu_tools,
|
|
107
|
+
file_system_path="./tmp/multi_bu_tests")
|
|
103
108
|
for i, task in enumerate([
|
|
104
109
|
# 'Search Google for weather in Tokyo',
|
|
105
110
|
# 'Check Reddit front page title',
|
|
@@ -122,8 +127,8 @@ async def run_multi_bu_agents():
|
|
|
122
127
|
print(await agent_browser_sessions[i].get_tabs())
|
|
123
128
|
print(ret.final_result())
|
|
124
129
|
await browser_manager.close()
|
|
125
|
-
await controller.unregister_mcp_clients()
|
|
126
130
|
await main_browser_session.kill()
|
|
131
|
+
await bu_tools.unregister_mcp_clients()
|
|
127
132
|
|
|
128
133
|
|
|
129
134
|
async def test_vibe_surf_agent():
|
|
@@ -133,37 +138,29 @@ async def test_vibe_surf_agent():
|
|
|
133
138
|
browser_exec_path = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
|
|
134
139
|
else:
|
|
135
140
|
browser_exec_path = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
|
|
136
|
-
|
|
137
|
-
primary_monitor = get_monitors()[0]
|
|
138
|
-
browser_profile = BrowserProfile(
|
|
141
|
+
browser_profile = AgentBrowserProfile(
|
|
139
142
|
executable_path=browser_exec_path,
|
|
140
143
|
user_data_dir=os.path.abspath('./tmp/chrome/profiles/default'),
|
|
141
144
|
headless=False,
|
|
142
|
-
keep_alive=True
|
|
143
|
-
highlight_elements=True,
|
|
144
|
-
window_size={"width": 1100, "height": 1280}
|
|
145
|
-
# window_size={"width": primary_monitor.width, "height": primary_monitor.height}
|
|
145
|
+
keep_alive=True
|
|
146
146
|
)
|
|
147
|
-
|
|
148
|
-
# Initialize components
|
|
147
|
+
# Use SwarmBrowserSession instead of BrowserSession to disable DVD animation
|
|
149
148
|
main_browser_session = AgentBrowserSession(browser_profile=browser_profile)
|
|
150
149
|
await main_browser_session.start()
|
|
151
|
-
|
|
150
|
+
vs_tools = VibeSurfTools()
|
|
152
151
|
browser_manager = BrowserManager(main_browser_session=main_browser_session)
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
base_url=os.getenv("OPENAI_ENDPOINT"),
|
|
158
|
-
api_key=os.getenv("OPENAI_API_KEY")
|
|
159
|
-
)
|
|
152
|
+
llm = ChatOpenAICompatible(model='gemini-2.5-flash',
|
|
153
|
+
base_url=os.getenv("OPENAI_ENDPOINT"),
|
|
154
|
+
api_key=os.getenv("OPENAI_API_KEY"))
|
|
155
|
+
|
|
160
156
|
|
|
161
157
|
# Create VibeSurfAgent
|
|
162
158
|
agent = VibeSurfAgent(
|
|
163
159
|
llm=llm,
|
|
164
160
|
browser_manager=browser_manager,
|
|
165
|
-
|
|
166
|
-
workspace_dir=os.path.abspath("./tmp/
|
|
161
|
+
tools=vs_tools,
|
|
162
|
+
workspace_dir=os.path.abspath("./tmp/vibesurf_tests"),
|
|
163
|
+
calculate_token_cost=True
|
|
167
164
|
)
|
|
168
165
|
|
|
169
166
|
try:
|
|
@@ -194,11 +191,11 @@ async def test_vibe_surf_agent():
|
|
|
194
191
|
|
|
195
192
|
# Test 4: Browser parallel task
|
|
196
193
|
print("🧪 Testing browser parallel tasks...")
|
|
197
|
-
browser_task = "Search for Dify, n8n, browser-use and
|
|
194
|
+
browser_task = "Search for Dify, n8n, browser-use and click into their own homepage, take screenshot and save"
|
|
198
195
|
result4 = await agent.run(browser_task)
|
|
199
196
|
print(f"✅ Browser task result:")
|
|
200
197
|
pprint.pprint(result4)
|
|
201
|
-
with open("./tmp/
|
|
198
|
+
with open("./tmp/vibesurf_tests/parallel_test.md", "w", encoding='utf-8') as fw:
|
|
202
199
|
fw.write(result4)
|
|
203
200
|
assert result4 is not None and len(result4) > 0
|
|
204
201
|
print("🎉 All VibeSurfAgent tests passed!")
|
|
@@ -219,35 +216,31 @@ async def test_vibe_surf_agent_control():
|
|
|
219
216
|
browser_exec_path = "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
|
|
220
217
|
else:
|
|
221
218
|
browser_exec_path = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
|
|
222
|
-
|
|
223
|
-
browser_profile = BrowserProfile(
|
|
219
|
+
browser_profile = AgentBrowserProfile(
|
|
224
220
|
executable_path=browser_exec_path,
|
|
225
|
-
user_data_dir=os.path.abspath('./tmp/chrome/profiles/
|
|
226
|
-
headless=False,
|
|
221
|
+
user_data_dir=os.path.abspath('./tmp/chrome/profiles/default'),
|
|
222
|
+
headless=False,
|
|
227
223
|
keep_alive=True
|
|
228
224
|
)
|
|
229
|
-
|
|
230
|
-
# Initialize components
|
|
225
|
+
# Use SwarmBrowserSession instead of BrowserSession to disable DVD animation
|
|
231
226
|
main_browser_session = AgentBrowserSession(browser_profile=browser_profile)
|
|
232
227
|
await main_browser_session.start()
|
|
233
|
-
|
|
228
|
+
vs_tools = VibeSurfTools()
|
|
234
229
|
browser_manager = BrowserManager(main_browser_session=main_browser_session)
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
model='gemini-2.5-flash',
|
|
239
|
-
base_url=os.getenv("OPENAI_ENDPOINT"),
|
|
240
|
-
api_key=os.getenv("OPENAI_API_KEY")
|
|
241
|
-
)
|
|
230
|
+
llm = ChatOpenAICompatible(model='gemini-2.5-pro',
|
|
231
|
+
base_url=os.getenv("OPENAI_ENDPOINT"),
|
|
232
|
+
api_key=os.getenv("OPENAI_API_KEY"))
|
|
242
233
|
|
|
234
|
+
|
|
243
235
|
# Create VibeSurfAgent
|
|
244
236
|
agent = VibeSurfAgent(
|
|
245
237
|
llm=llm,
|
|
246
238
|
browser_manager=browser_manager,
|
|
247
|
-
|
|
248
|
-
workspace_dir="./tmp/
|
|
239
|
+
tools=vs_tools,
|
|
240
|
+
workspace_dir=os.path.abspath("./tmp/vibesurf_tests"),
|
|
241
|
+
calculate_token_cost=True
|
|
249
242
|
)
|
|
250
|
-
|
|
243
|
+
|
|
251
244
|
try:
|
|
252
245
|
print("🧪 Testing VibeSurfAgent control functionality...")
|
|
253
246
|
|
|
@@ -375,6 +368,6 @@ async def test_vibe_surf_agent_control():
|
|
|
375
368
|
|
|
376
369
|
if __name__ == "__main__":
|
|
377
370
|
# asyncio.run(run_single_bu_agent())
|
|
378
|
-
asyncio.run(run_multi_bu_agents())
|
|
379
|
-
|
|
371
|
+
# asyncio.run(run_multi_bu_agents())
|
|
372
|
+
asyncio.run(test_vibe_surf_agent())
|
|
380
373
|
# asyncio.run(test_vibe_surf_agent_control())
|
|
@@ -206,33 +206,33 @@ async def test_llm_profile_management():
|
|
|
206
206
|
|
|
207
207
|
|
|
208
208
|
async def test_controller_configuration():
|
|
209
|
-
"""Test
|
|
209
|
+
"""Test tools/MCP server configuration"""
|
|
210
210
|
print("\n🧪 Testing Controller Configuration...")
|
|
211
211
|
async with BackendAPITester() as tester:
|
|
212
212
|
await tester.wait_for_backend()
|
|
213
213
|
|
|
214
|
-
# 1. Get current
|
|
215
|
-
print("\n📋 Testing get
|
|
216
|
-
config_resp = await tester.get("/config/
|
|
214
|
+
# 1. Get current tools config
|
|
215
|
+
print("\n📋 Testing get tools config...")
|
|
216
|
+
config_resp = await tester.get("/config/tools")
|
|
217
217
|
print(f"Controller config response: {config_resp}")
|
|
218
218
|
|
|
219
|
-
# 2. Update
|
|
220
|
-
print("\n✏️ Testing update
|
|
219
|
+
# 2. Update tools config (using new Pydantic model)
|
|
220
|
+
print("\n✏️ Testing update tools config...")
|
|
221
221
|
controller_config = {
|
|
222
222
|
"exclude_actions": ["scroll_up", "scroll_down"],
|
|
223
223
|
"max_actions_per_task": 150,
|
|
224
224
|
"display_files_in_done_text": False
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
-
update_resp = await tester.post("/config/
|
|
227
|
+
update_resp = await tester.post("/config/tools", controller_config)
|
|
228
228
|
if update_resp["status"] == 200:
|
|
229
229
|
print("✅ Controller configuration updated successfully")
|
|
230
230
|
else:
|
|
231
231
|
print(f"❌ Controller config update failed: {update_resp}")
|
|
232
232
|
|
|
233
233
|
# 3. Verify the update
|
|
234
|
-
print("\n🔍 Testing verify
|
|
235
|
-
verify_resp = await tester.get("/config/
|
|
234
|
+
print("\n🔍 Testing verify tools config update...")
|
|
235
|
+
verify_resp = await tester.get("/config/tools")
|
|
236
236
|
if verify_resp["status"] == 200:
|
|
237
237
|
print("✅ Controller configuration verified")
|
|
238
238
|
|
|
@@ -440,7 +440,7 @@ async def test_configuration_status():
|
|
|
440
440
|
status_data = status_resp["data"]
|
|
441
441
|
print(f"Overall status: {status_data.get('overall_status')}")
|
|
442
442
|
print(f"LLM profiles: {status_data.get('llm_profiles')}")
|
|
443
|
-
print(f"Controller initialized: {status_data.get('
|
|
443
|
+
print(f"Controller initialized: {status_data.get('tools', {}).get('initialized')}")
|
|
444
444
|
print(f"Browser manager initialized: {status_data.get('browser_manager', {}).get('initialized')}")
|
|
445
445
|
print(f"Swarm agent initialized: {status_data.get('swarm_agent', {}).get('initialized')}")
|
|
446
446
|
|
|
@@ -10,9 +10,9 @@ from dotenv import load_dotenv
|
|
|
10
10
|
load_dotenv()
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
async def
|
|
13
|
+
async def test_tools_with_mcp():
|
|
14
14
|
import os
|
|
15
|
-
from vibe_surf.
|
|
15
|
+
from vibe_surf.tools.vibesurf_tools import VibeSurfTools
|
|
16
16
|
|
|
17
17
|
mcp_server_config = {
|
|
18
18
|
"mcpServers": {
|
|
@@ -43,7 +43,7 @@ async def test_controller_with_mcp():
|
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
controller =
|
|
46
|
+
controller = VibeSurfTools(mcp_server_config=mcp_server_config)
|
|
47
47
|
await controller.register_mcp_clients()
|
|
48
48
|
pdb.set_trace()
|
|
49
49
|
# action_name = "mcp.desktop-commander.start_process"
|
|
@@ -71,7 +71,7 @@ async def test_controller_with_mcp():
|
|
|
71
71
|
# pid = int(result.split("\n")[0].split("PID")[-1].strip())
|
|
72
72
|
# pdb.set_trace()
|
|
73
73
|
# action_name = "mcp.desktop-commander.read_process_output"
|
|
74
|
-
# action_info =
|
|
74
|
+
# action_info = tools.registry.registry.actions[action_name]
|
|
75
75
|
# param_model = action_info.param_model
|
|
76
76
|
# print(param_model.model_json_schema())
|
|
77
77
|
# params = {"pid": pid}
|
|
@@ -80,7 +80,7 @@ async def test_controller_with_mcp():
|
|
|
80
80
|
# output_result = ""
|
|
81
81
|
# while True:
|
|
82
82
|
# time.sleep(1)
|
|
83
|
-
# result = await
|
|
83
|
+
# result = await tools.act(action_model)
|
|
84
84
|
# result = result.extracted_content
|
|
85
85
|
# if result:
|
|
86
86
|
# output_result = result
|
|
@@ -90,15 +90,34 @@ async def test_controller_with_mcp():
|
|
|
90
90
|
|
|
91
91
|
|
|
92
92
|
async def test_filesystem():
|
|
93
|
-
from
|
|
93
|
+
from vibe_surf.tools.file_system import CustomFileSystem
|
|
94
94
|
|
|
95
95
|
file_system_path = r"E:\AIBrowser\VibeSurf\tmp\vibesurf_workspace"
|
|
96
|
-
filesystem =
|
|
97
|
-
result = await filesystem.
|
|
98
|
-
"E:/AIBrowser/VibeSurf/tmp/vibesurf_workspace/068b3165-ddb7-7a49-8000-d4df8a16ae2d/upload_files/Ayers Application Form.md")
|
|
96
|
+
filesystem = CustomFileSystem(file_system_path)
|
|
97
|
+
result = await filesystem.create_file("reports/final_report.html")
|
|
99
98
|
print(result)
|
|
99
|
+
result = filesystem.get_absolute_path("reports/final_report.html")
|
|
100
|
+
print(result)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
async def test_bu_tools():
|
|
104
|
+
import os
|
|
105
|
+
from vibe_surf.tools.browser_use_tools import BrowserUseTools
|
|
106
|
+
|
|
107
|
+
tools = BrowserUseTools()
|
|
108
|
+
print(tools.registry.registry.actions.keys())
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
async def test_vibesurf_tools():
|
|
112
|
+
import os
|
|
113
|
+
from vibe_surf.tools.vibesurf_tools import VibeSurfTools
|
|
114
|
+
|
|
115
|
+
tools = VibeSurfTools()
|
|
116
|
+
print(tools.registry.registry.actions.keys())
|
|
100
117
|
|
|
101
118
|
|
|
102
119
|
if __name__ == '__main__':
|
|
103
|
-
# asyncio.run(
|
|
104
|
-
asyncio.run(test_filesystem())
|
|
120
|
+
# asyncio.run(test_tools_with_mcp())
|
|
121
|
+
# asyncio.run(test_filesystem())
|
|
122
|
+
# asyncio.run(test_bu_tools())
|
|
123
|
+
asyncio.run(test_vibesurf_tools())
|
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.1.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 1,
|
|
31
|
+
__version__ = version = '0.1.11'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 1, 11)
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'g542374226'
|