vibesurf 0.1.40__tar.gz → 0.1.42__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.

Files changed (152) hide show
  1. {vibesurf-0.1.40 → vibesurf-0.1.42}/PKG-INFO +1 -1
  2. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/_version.py +3 -3
  3. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/agents/report_writer_agent.py +1 -1
  4. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/agents/vibe_surf_agent.py +17 -3
  5. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/browser/agen_browser_profile.py +5 -5
  6. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/browser/agent_browser_session.py +5 -5
  7. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/scripts/ui-manager.js +1 -1
  8. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/sidepanel.html +1 -1
  9. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/file_system.py +2 -1
  10. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/vibesurf_tools.py +7 -7
  11. vibesurf-0.1.42/vibe_surf/utils.py +34 -0
  12. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibesurf.egg-info/PKG-INFO +1 -1
  13. vibesurf-0.1.40/vibe_surf/utils.py +0 -13
  14. {vibesurf-0.1.40 → vibesurf-0.1.42}/.env.example +0 -0
  15. {vibesurf-0.1.40 → vibesurf-0.1.42}/.github/workflows/publish.yml +0 -0
  16. {vibesurf-0.1.40 → vibesurf-0.1.42}/.gitignore +0 -0
  17. {vibesurf-0.1.40 → vibesurf-0.1.42}/.python-version +0 -0
  18. {vibesurf-0.1.40 → vibesurf-0.1.42}/LICENSE +0 -0
  19. {vibesurf-0.1.40 → vibesurf-0.1.42}/MANIFEST.in +0 -0
  20. {vibesurf-0.1.40 → vibesurf-0.1.42}/README.md +0 -0
  21. {vibesurf-0.1.40 → vibesurf-0.1.42}/README_zh.md +0 -0
  22. {vibesurf-0.1.40 → vibesurf-0.1.42}/docs/EXECUTABLE_BUILD.md +0 -0
  23. {vibesurf-0.1.40 → vibesurf-0.1.42}/docs/PYPI_SETUP.md +0 -0
  24. {vibesurf-0.1.40 → vibesurf-0.1.42}/pyproject.toml +0 -0
  25. {vibesurf-0.1.40 → vibesurf-0.1.42}/scripts/build-local.bat +0 -0
  26. {vibesurf-0.1.40 → vibesurf-0.1.42}/scripts/build-local.sh +0 -0
  27. {vibesurf-0.1.40 → vibesurf-0.1.42}/setup.cfg +0 -0
  28. {vibesurf-0.1.40 → vibesurf-0.1.42}/tests/test_agents.py +0 -0
  29. {vibesurf-0.1.40 → vibesurf-0.1.42}/tests/test_backend_api.py +0 -0
  30. {vibesurf-0.1.40 → vibesurf-0.1.42}/tests/test_browser.py +0 -0
  31. {vibesurf-0.1.40 → vibesurf-0.1.42}/tests/test_telemetry.py +0 -0
  32. {vibesurf-0.1.40 → vibesurf-0.1.42}/tests/test_tools.py +0 -0
  33. {vibesurf-0.1.40 → vibesurf-0.1.42}/tests/test_voice_api.py +0 -0
  34. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/__init__.py +0 -0
  35. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/agents/__init__.py +0 -0
  36. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/agents/browser_use_agent.py +0 -0
  37. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/agents/prompts/__init__.py +0 -0
  38. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/agents/prompts/report_writer_prompt.py +0 -0
  39. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/agents/prompts/vibe_surf_prompt.py +0 -0
  40. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/agents/views.py +0 -0
  41. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/__init__.py +0 -0
  42. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/api/__init__.py +0 -0
  43. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/api/activity.py +0 -0
  44. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/api/agent.py +0 -0
  45. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/api/browser.py +0 -0
  46. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/api/composio.py +0 -0
  47. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/api/config.py +0 -0
  48. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/api/files.py +0 -0
  49. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/api/models.py +0 -0
  50. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/api/task.py +0 -0
  51. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/api/voices.py +0 -0
  52. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/database/__init__.py +0 -0
  53. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/database/manager.py +0 -0
  54. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/database/migrations/v001_initial_schema.sql +0 -0
  55. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/database/migrations/v002_add_agent_mode.sql +0 -0
  56. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/database/migrations/v003_fix_task_status_case.sql +0 -0
  57. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/database/migrations/v004_add_voice_profiles.sql +0 -0
  58. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/database/migrations/v005_add_composio_integration.sql +0 -0
  59. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/database/migrations/v006_add_credentials_table.sql +0 -0
  60. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/database/models.py +0 -0
  61. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/database/queries.py +0 -0
  62. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/database/schemas.py +0 -0
  63. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/llm_config.py +0 -0
  64. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/main.py +0 -0
  65. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/shared_state.py +0 -0
  66. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/utils/__init__.py +0 -0
  67. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/utils/encryption.py +0 -0
  68. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/utils/llm_factory.py +0 -0
  69. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/utils/utils.py +0 -0
  70. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/backend/voice_model_config.py +0 -0
  71. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/browser/__init__.py +0 -0
  72. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/browser/browser_manager.py +0 -0
  73. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/browser/utils.py +0 -0
  74. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/browser/watchdogs/__init__.py +0 -0
  75. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/browser/watchdogs/action_watchdog.py +0 -0
  76. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/browser/watchdogs/dom_watchdog.py +0 -0
  77. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/background.js +0 -0
  78. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/config.js +0 -0
  79. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/content.js +0 -0
  80. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/dev-reload.js +0 -0
  81. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/icons/logo.icns +0 -0
  82. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/icons/logo.png +0 -0
  83. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/manifest.json +0 -0
  84. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/permission-iframe.html +0 -0
  85. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/permission-request.html +0 -0
  86. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/popup.html +0 -0
  87. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/scripts/api-client.js +0 -0
  88. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/scripts/file-manager.js +0 -0
  89. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/scripts/history-manager.js +0 -0
  90. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/scripts/main.js +0 -0
  91. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/scripts/markdown-it.min.js +0 -0
  92. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/scripts/modal-manager.js +0 -0
  93. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/scripts/permission-iframe-request.js +0 -0
  94. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/scripts/permission-request.js +0 -0
  95. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/scripts/session-manager.js +0 -0
  96. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/scripts/settings-manager.js +0 -0
  97. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/scripts/user-settings-storage.js +0 -0
  98. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/scripts/voice-recorder.js +0 -0
  99. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/styles/activity.css +0 -0
  100. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/styles/animations.css +0 -0
  101. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/styles/base.css +0 -0
  102. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/styles/components.css +0 -0
  103. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/styles/history-modal.css +0 -0
  104. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/styles/input.css +0 -0
  105. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/styles/layout.css +0 -0
  106. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/styles/responsive.css +0 -0
  107. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/styles/settings-environment.css +0 -0
  108. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/styles/settings-forms.css +0 -0
  109. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/styles/settings-integrations.css +0 -0
  110. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/styles/settings-modal.css +0 -0
  111. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/styles/settings-profiles.css +0 -0
  112. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/styles/settings-responsive.css +0 -0
  113. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/styles/settings-utilities.css +0 -0
  114. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/chrome_extension/styles/variables.css +0 -0
  115. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/cli.py +0 -0
  116. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/common.py +0 -0
  117. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/llm/__init__.py +0 -0
  118. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/llm/openai_compatible.py +0 -0
  119. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/logger.py +0 -0
  120. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/telemetry/__init__.py +0 -0
  121. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/telemetry/service.py +0 -0
  122. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/telemetry/views.py +0 -0
  123. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/__init__.py +0 -0
  124. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/browser_use_tools.py +0 -0
  125. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/composio_client.py +0 -0
  126. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/finance_tools.py +0 -0
  127. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/mcp_client.py +0 -0
  128. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/report_writer_tools.py +0 -0
  129. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/utils.py +0 -0
  130. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/vibesurf_registry.py +0 -0
  131. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/views.py +0 -0
  132. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/voice_asr.py +0 -0
  133. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/website_api/__init__.py +0 -0
  134. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/website_api/douyin/__init__.py +0 -0
  135. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/website_api/douyin/client.py +0 -0
  136. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/website_api/douyin/douyin.js +0 -0
  137. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/website_api/douyin/helpers.py +0 -0
  138. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/website_api/weibo/__init__.py +0 -0
  139. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/website_api/weibo/client.py +0 -0
  140. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/website_api/weibo/helpers.py +0 -0
  141. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/website_api/xhs/__init__.py +0 -0
  142. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/website_api/xhs/client.py +0 -0
  143. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/website_api/xhs/helpers.py +0 -0
  144. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/website_api/youtube/__init__.py +0 -0
  145. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/website_api/youtube/client.py +0 -0
  146. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibe_surf/tools/website_api/youtube/helpers.py +0 -0
  147. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibesurf.egg-info/SOURCES.txt +0 -0
  148. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibesurf.egg-info/dependency_links.txt +0 -0
  149. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibesurf.egg-info/entry_points.txt +0 -0
  150. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibesurf.egg-info/requires.txt +0 -0
  151. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibesurf.egg-info/top_level.txt +0 -0
  152. {vibesurf-0.1.40 → vibesurf-0.1.42}/vibesurf.spec +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vibesurf
3
- Version: 0.1.40
3
+ Version: 0.1.42
4
4
  Summary: VibeSurf: A powerful browser assistant for vibe surfing
5
5
  Author: WarmShao
6
6
  License: Apache-2.0
@@ -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.40'
32
- __version_tuple__ = version_tuple = (0, 1, 40)
31
+ __version__ = version = '0.1.42'
32
+ __version_tuple__ = version_tuple = (0, 1, 42)
33
33
 
34
- __commit_id__ = commit_id = 'g43aac7565'
34
+ __commit_id__ = commit_id = 'ge71cce9e4'
@@ -153,7 +153,7 @@ class ReportWriterAgent:
153
153
  create_result = await self.file_system.create_file(report_filename)
154
154
  logger.info(f"Created report file: {create_result}")
155
155
 
156
- max_iterations = 10 # Prevent infinite loops
156
+ max_iterations = 20 # Prevent infinite loops
157
157
 
158
158
  # Add system message with unified prompt only if message history is empty
159
159
  if not self.message_history:
@@ -29,6 +29,7 @@ from browser_use.tokens.service import TokenCost
29
29
  from vibe_surf.agents.browser_use_agent import BrowserUseAgent
30
30
  from vibe_surf.agents.report_writer_agent import ReportWriterAgent, ReportTaskResult
31
31
  from vibe_surf.agents.views import CustomAgentOutput
32
+ from vibe_surf.utils import check_latest_vibesurf_version, get_vibesurf_version
32
33
 
33
34
  from vibe_surf.agents.prompts.vibe_surf_prompt import (
34
35
  VIBESURF_SYSTEM_PROMPT,
@@ -448,7 +449,8 @@ async def _vibesurf_agent_node_impl(state: VibeSurfState) -> VibeSurfState:
448
449
  for browser_task in state.browser_tasks:
449
450
  bu_task = browser_task.get('task', "")
450
451
  if bu_task:
451
- browser_tasks_md.append(f"- [ ] {bu_task}")
452
+ bu_task_tabid = browser_task.get('tab_id', "")
453
+ browser_tasks_md.append(f"- [ ] Tab id: {bu_task_tabid} working {bu_task}")
452
454
  browser_tasks_md = '\n'.join(browser_tasks_md)
453
455
  agent_msg = f"Routing to browser task execution with {len(state.browser_tasks)} browser tasks:\n\n{browser_tasks_md}"
454
456
  await log_agent_activity(state, agent_name, "working", agent_msg)
@@ -624,7 +626,7 @@ async def execute_parallel_browser_tasks(state: VibeSurfState) -> List[BrowserTa
624
626
  task_description = task_info.get('task', '')
625
627
  if not task_description:
626
628
  continue
627
- target_id = task_info.get('target_id', None)
629
+ target_id = task_info.get('tab_id', None)
628
630
  register_sessions.append(
629
631
  state.vibesurf_agent.browser_manager.register_agent(agent_id, target_id=target_id)
630
632
  )
@@ -756,7 +758,7 @@ async def execute_parallel_browser_tasks(state: VibeSurfState) -> List[BrowserTa
756
758
  finally:
757
759
  # Remove agents from control tracking and cleanup browser sessions
758
760
  for i, agent_id in enumerate(bu_agent_ids):
759
- if not isinstance(pending_tasks[i], list):
761
+ if pending_tasks[i].get('tab_id', None) is None:
760
762
  await state.vibesurf_agent.browser_manager.unregister_agent(agent_id, close_tabs=True)
761
763
  if state.vibesurf_agent and hasattr(state.vibesurf_agent, '_running_agents'):
762
764
  state.vibesurf_agent._running_agents.pop(agent_id, None)
@@ -1680,6 +1682,18 @@ Action list should NEVER be empty and Each step can only output one action. If m
1680
1682
  }
1681
1683
  self.activity_logs.append(activity_entry)
1682
1684
 
1685
+ latest_version = await check_latest_vibesurf_version()
1686
+ current_version = get_vibesurf_version()
1687
+ if latest_version and latest_version != current_version:
1688
+ update_msg = f'📦 Newer version of vibesurf available: {latest_version} (current: {current_version}). \nUpgrade with: \n`uv pip install vibesurf -U`\nor\nDownload [Windows Installer](https://github.com/vibesurf-ai/VibeSurf/releases/latest/download/vibesurf-windows-x64.exe).'
1689
+ logger.info(update_msg)
1690
+ activity_update_tip = {
1691
+ "agent_name": 'System',
1692
+ "agent_status": 'tip', # working, result, error
1693
+ "agent_msg": update_msg
1694
+ }
1695
+ self.activity_logs.append(activity_update_tip)
1696
+
1683
1697
  # Initialize state first (needed for file processing)
1684
1698
  initial_state = VibeSurfState(
1685
1699
  original_task=task,
@@ -45,11 +45,11 @@ class AgentBrowserProfile(BrowserProfile):
45
45
  'id': 'edibdbjcniadpccecjdfdjjppcpchdlm',
46
46
  'url': 'https://clients2.google.com/service/update2/crx?response=redirect&prodversion=130&acceptformat=crx3&x=id%3Dedibdbjcniadpccecjdfdjjppcpchdlm%26uc',
47
47
  },
48
- {
49
- 'name': 'Force Background Tab',
50
- 'id': 'gidlfommnbibbmegmgajdbikelkdcmcl',
51
- 'url': 'https://clients2.google.com/service/update2/crx?response=redirect&prodversion=133&acceptformat=crx3&x=id%3Dgidlfommnbibbmegmgajdbikelkdcmcl%26uc',
52
- },
48
+ # {
49
+ # 'name': 'Force Background Tab',
50
+ # 'id': 'gidlfommnbibbmegmgajdbikelkdcmcl',
51
+ # 'url': 'https://clients2.google.com/service/update2/crx?response=redirect&prodversion=133&acceptformat=crx3&x=id%3Dgidlfommnbibbmegmgajdbikelkdcmcl%26uc',
52
+ # },
53
53
  # {
54
54
  # 'name': 'ClearURLs',
55
55
  # 'id': 'lckanjgmijmafbedllaakclkaicjfmnk',
@@ -292,8 +292,8 @@ class AgentBrowserSession(BrowserSession):
292
292
  self.logger.info(f"Agent {self.id}: Assigned target {target_id}")
293
293
  self.agent_focus = await CDPSession.for_target(self._cdp_client_root, target_id, new_socket=True,
294
294
  cdp_url=self.cdp_url)
295
- await self.agent_focus.cdp_client.send.Target.activateTarget(
296
- params={'targetId': target_id})
295
+ # await self.agent_focus.cdp_client.send.Target.activateTarget(
296
+ # params={'targetId': target_id})
297
297
  await self.agent_focus.cdp_client.send.Runtime.runIfWaitingForDebugger(
298
298
  session_id=self.agent_focus.session_id)
299
299
  self._cdp_session_pool[target_id] = self.agent_focus
@@ -487,7 +487,7 @@ class AgentBrowserSession(BrowserSession):
487
487
  self.agent_focus = session
488
488
 
489
489
  # Activate target without events
490
- await session.cdp_client.send.Target.activateTarget(params={'targetId': target_id})
490
+ # await session.cdp_client.send.Target.activateTarget(params={'targetId': target_id})
491
491
  await session.cdp_client.send.Runtime.runIfWaitingForDebugger(session_id=session.session_id)
492
492
  else:
493
493
  # Use current tab - no tab switching events
@@ -710,7 +710,7 @@ class AgentBrowserSession(BrowserSession):
710
710
  )
711
711
  self.agent_focus = session
712
712
  if focus:
713
- await session.cdp_client.send.Target.activateTarget(params={'targetId': session.target_id})
713
+ # await session.cdp_client.send.Target.activateTarget(params={'targetId': session.target_id})
714
714
  await session.cdp_client.send.Runtime.runIfWaitingForDebugger(session_id=session.session_id)
715
715
  # else:
716
716
  # self.logger.debug(f'[get_or_create_cdp_session] Reusing existing session for {target_id} (focus={focus})')
@@ -743,7 +743,7 @@ class AgentBrowserSession(BrowserSession):
743
743
  f'[get_or_create_cdp_session] Switching agent focus from {self.agent_focus.target_id} to {target_id}'
744
744
  )
745
745
  self.agent_focus = session
746
- await session.cdp_client.send.Target.activateTarget(params={'targetId': session.target_id})
746
+ # await session.cdp_client.send.Target.activateTarget(params={'targetId': session.target_id})
747
747
  await session.cdp_client.send.Runtime.runIfWaitingForDebugger(session_id=session.session_id)
748
748
  else:
749
749
  self.logger.debug(
@@ -1475,7 +1475,7 @@ class VibeSurfUIManager {
1475
1475
  <div class="task-icon">🔍</div>
1476
1476
  <div class="task-content">
1477
1477
  <div class="task-title">Research Founders</div>
1478
- <div class="task-description">Search information about browser-use and browser-use-webui, write a brief report</div>
1478
+ <div class="task-description">Search information about AI browser assistant: VibeSurf, write a brief report</div>
1479
1479
  </div>
1480
1480
  </div>
1481
1481
  <div class="task-suggestion" data-task="news">
@@ -88,7 +88,7 @@
88
88
  <div class="task-icon">🔍</div>
89
89
  <div class="task-content">
90
90
  <div class="task-title">Research Founders</div>
91
- <div class="task-description">Search information about browser-use and browser-use-webui, write a brief report</div>
91
+ <div class="task-description">Search information about AI browser assistant: VibeSurf, write a brief report</div>
92
92
  </div>
93
93
  </div>
94
94
  <div class="task-suggestion" data-task="news">
@@ -65,7 +65,8 @@ class CustomFileSystem(FileSystem):
65
65
 
66
66
  async def display_file(self, full_filename: str) -> str | None:
67
67
  """Display file content using file-specific display method"""
68
- if not self.file_exist(full_filename):
68
+ if_file_exist = await self.file_exist(full_filename)
69
+ if not if_file_exist:
69
70
  return f"{full_filename} does not exist."
70
71
 
71
72
  file_content = await self.read_file(full_filename)
@@ -281,10 +281,10 @@ Format: [index1, index2, index3, ...]
281
281
  if params.tab_id:
282
282
  target_id = await browser_session.get_target_id_from_tab_id(params.tab_id)
283
283
  current_target_id = None
284
- if browser_session.agent_focus:
285
- current_target_id = browser_session.agent_focus.target_id
284
+ if browser_session._dom_watchdog and browser_session._dom_watchdog.enhanced_dom_tree:
285
+ current_target_id = browser_session._dom_watchdog.enhanced_dom_tree.target_id
286
286
  if current_target_id != target_id:
287
- browser_session._dom_watchdog.enhanced_dom_tree = None
287
+ browser_session._dom_watchdog.clear_cache()
288
288
  await browser_session.get_or_create_cdp_session(target_id, focus=True)
289
289
 
290
290
  # Extract structured content using the existing method
@@ -340,10 +340,10 @@ Format: [index1, index2, index3, ...]
340
340
  if params.tab_id:
341
341
  target_id = await browser_session.get_target_id_from_tab_id(params.tab_id)
342
342
  current_target_id = None
343
- if browser_session.agent_focus:
344
- current_target_id = browser_session.agent_focus.target_id
343
+ if browser_session._dom_watchdog and browser_session._dom_watchdog.enhanced_dom_tree:
344
+ current_target_id = browser_session._dom_watchdog.enhanced_dom_tree.target_id
345
345
  if current_target_id != target_id:
346
- browser_session._dom_watchdog.enhanced_dom_tree = None
346
+ browser_session._dom_watchdog.clear_cache()
347
347
  await browser_session.get_or_create_cdp_session(target_id, focus=True)
348
348
 
349
349
  # Extract and summarize content
@@ -1589,7 +1589,7 @@ You will be given a query and the markdown of a webpage that has been filtered t
1589
1589
 
1590
1590
  def _register_browser_use_agent(self):
1591
1591
  @self.registry.action(
1592
- 'Execute browser_use agent tasks.',
1592
+ 'Execute browser_use agent tasks. Please specify a tab id to an agent, if you want to let agent work on this tab.',
1593
1593
  param_model=BrowserUseAgentExecution,
1594
1594
  )
1595
1595
  async def execute_browser_use_agent(
@@ -0,0 +1,34 @@
1
+ import pdb
2
+
3
+ import httpx
4
+
5
+ def singleton(cls):
6
+ instance = [None]
7
+
8
+ def wrapper(*args, **kwargs):
9
+ if instance[0] is None:
10
+ instance[0] = cls(*args, **kwargs)
11
+ return instance[0]
12
+
13
+ return wrapper
14
+
15
+ def get_vibesurf_version() -> str:
16
+ import vibe_surf
17
+ return str(vibe_surf.__version__)
18
+
19
+ async def check_latest_vibesurf_version() -> str | None:
20
+ """Check the latest version of browser-use from PyPI asynchronously.
21
+
22
+ Returns:
23
+ The latest version string if successful, None if failed
24
+ """
25
+ try:
26
+ async with httpx.AsyncClient(timeout=3.0) as client:
27
+ response = await client.get('https://pypi.org/pypi/vibesurf/json')
28
+ if response.status_code == 200:
29
+ data = response.json()
30
+ return data['info']['version']
31
+ except Exception:
32
+ # Silently fail - we don't want to break agent startup due to network issues
33
+ pass
34
+ return None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vibesurf
3
- Version: 0.1.40
3
+ Version: 0.1.42
4
4
  Summary: VibeSurf: A powerful browser assistant for vibe surfing
5
5
  Author: WarmShao
6
6
  License: Apache-2.0
@@ -1,13 +0,0 @@
1
- def singleton(cls):
2
- instance = [None]
3
-
4
- def wrapper(*args, **kwargs):
5
- if instance[0] is None:
6
- instance[0] = cls(*args, **kwargs)
7
- return instance[0]
8
-
9
- return wrapper
10
-
11
- def get_vibesurf_version() -> str:
12
- import vibe_surf
13
- return str(vibe_surf.__version__)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes