vibesurf 0.1.18__tar.gz → 0.1.20__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 (114) hide show
  1. {vibesurf-0.1.18 → vibesurf-0.1.20}/.env.example +2 -2
  2. {vibesurf-0.1.18 → vibesurf-0.1.20}/PKG-INFO +3 -2
  3. {vibesurf-0.1.18 → vibesurf-0.1.20}/pyproject.toml +2 -1
  4. vibesurf-0.1.20/tests/test_voice_api.py +26 -0
  5. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/_version.py +3 -3
  6. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/agents/report_writer_agent.py +1 -1
  7. vibesurf-0.1.20/vibe_surf/backend/database/migrations/v003_fix_task_status_case.sql +11 -0
  8. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/sidepanel.html +17 -0
  9. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/styles/layout.css +55 -0
  10. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/tools/file_system.py +8 -0
  11. vibesurf-0.1.20/vibe_surf/tools/voice_asr.py +54 -0
  12. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibesurf.egg-info/PKG-INFO +3 -2
  13. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibesurf.egg-info/SOURCES.txt +5 -0
  14. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibesurf.egg-info/requires.txt +2 -1
  15. {vibesurf-0.1.18 → vibesurf-0.1.20}/.github/workflows/publish.yml +0 -0
  16. {vibesurf-0.1.18 → vibesurf-0.1.20}/.gitignore +0 -0
  17. {vibesurf-0.1.18 → vibesurf-0.1.20}/.python-version +0 -0
  18. {vibesurf-0.1.18 → vibesurf-0.1.20}/LICENSE +0 -0
  19. {vibesurf-0.1.18 → vibesurf-0.1.20}/MANIFEST.in +0 -0
  20. {vibesurf-0.1.18 → vibesurf-0.1.20}/README.md +0 -0
  21. {vibesurf-0.1.18 → vibesurf-0.1.20}/docs/EXECUTABLE_BUILD.md +0 -0
  22. {vibesurf-0.1.18 → vibesurf-0.1.20}/docs/PYPI_SETUP.md +0 -0
  23. {vibesurf-0.1.18 → vibesurf-0.1.20}/scripts/build-local.bat +0 -0
  24. {vibesurf-0.1.18 → vibesurf-0.1.20}/scripts/build-local.sh +0 -0
  25. {vibesurf-0.1.18 → vibesurf-0.1.20}/setup.cfg +0 -0
  26. {vibesurf-0.1.18 → vibesurf-0.1.20}/tests/test_agents.py +0 -0
  27. {vibesurf-0.1.18 → vibesurf-0.1.20}/tests/test_backend_api.py +0 -0
  28. {vibesurf-0.1.18 → vibesurf-0.1.20}/tests/test_browser.py +0 -0
  29. {vibesurf-0.1.18 → vibesurf-0.1.20}/tests/test_tools.py +0 -0
  30. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/__init__.py +0 -0
  31. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/agents/__init__.py +0 -0
  32. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/agents/browser_use_agent.py +0 -0
  33. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/agents/prompts/__init__.py +0 -0
  34. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/agents/prompts/report_writer_prompt.py +0 -0
  35. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/agents/prompts/vibe_surf_prompt.py +0 -0
  36. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/agents/vibe_surf_agent.py +0 -0
  37. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/agents/views.py +0 -0
  38. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/backend/__init__.py +0 -0
  39. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/backend/api/__init__.py +0 -0
  40. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/backend/api/activity.py +0 -0
  41. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/backend/api/browser.py +0 -0
  42. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/backend/api/config.py +0 -0
  43. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/backend/api/files.py +0 -0
  44. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/backend/api/models.py +0 -0
  45. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/backend/api/task.py +0 -0
  46. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/backend/database/__init__.py +0 -0
  47. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/backend/database/manager.py +0 -0
  48. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/backend/database/migrations/v001_initial_schema.sql +0 -0
  49. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/backend/database/migrations/v002_add_agent_mode.sql +0 -0
  50. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/backend/database/models.py +0 -0
  51. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/backend/database/queries.py +0 -0
  52. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/backend/database/schemas.py +0 -0
  53. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/backend/llm_config.py +0 -0
  54. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/backend/main.py +0 -0
  55. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/backend/shared_state.py +0 -0
  56. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/backend/utils/__init__.py +0 -0
  57. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/backend/utils/encryption.py +0 -0
  58. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/backend/utils/llm_factory.py +0 -0
  59. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/browser/__init__.py +0 -0
  60. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/browser/agen_browser_profile.py +0 -0
  61. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/browser/agent_browser_session.py +0 -0
  62. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/browser/browser_manager.py +0 -0
  63. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/browser/utils.py +0 -0
  64. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/browser/watchdogs/__init__.py +0 -0
  65. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/browser/watchdogs/action_watchdog.py +0 -0
  66. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/browser/watchdogs/dom_watchdog.py +0 -0
  67. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/background.js +0 -0
  68. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/config.js +0 -0
  69. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/content.js +0 -0
  70. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/dev-reload.js +0 -0
  71. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/icons/convert-svg.js +0 -0
  72. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/icons/logo-preview.html +0 -0
  73. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/icons/logo.icns +0 -0
  74. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/icons/logo.png +0 -0
  75. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/manifest.json +0 -0
  76. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/popup.html +0 -0
  77. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/scripts/api-client.js +0 -0
  78. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/scripts/file-manager.js +0 -0
  79. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/scripts/history-manager.js +0 -0
  80. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/scripts/main.js +0 -0
  81. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/scripts/markdown-it.min.js +0 -0
  82. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/scripts/modal-manager.js +0 -0
  83. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/scripts/session-manager.js +0 -0
  84. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/scripts/settings-manager.js +0 -0
  85. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/scripts/ui-manager.js +0 -0
  86. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/styles/activity.css +0 -0
  87. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/styles/animations.css +0 -0
  88. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/styles/base.css +0 -0
  89. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/styles/components.css +0 -0
  90. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/styles/history-modal.css +0 -0
  91. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/styles/input.css +0 -0
  92. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/styles/responsive.css +0 -0
  93. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/styles/settings-environment.css +0 -0
  94. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/styles/settings-forms.css +0 -0
  95. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/styles/settings-modal.css +0 -0
  96. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/styles/settings-profiles.css +0 -0
  97. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/styles/settings-responsive.css +0 -0
  98. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/styles/settings-utilities.css +0 -0
  99. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/chrome_extension/styles/variables.css +0 -0
  100. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/cli.py +0 -0
  101. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/common.py +0 -0
  102. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/llm/__init__.py +0 -0
  103. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/llm/openai_compatible.py +0 -0
  104. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/logger.py +0 -0
  105. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/tools/__init__.py +0 -0
  106. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/tools/browser_use_tools.py +0 -0
  107. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/tools/mcp_client.py +0 -0
  108. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/tools/report_writer_tools.py +0 -0
  109. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/tools/vibesurf_tools.py +0 -0
  110. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibe_surf/tools/views.py +0 -0
  111. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibesurf.egg-info/dependency_links.txt +0 -0
  112. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibesurf.egg-info/entry_points.txt +0 -0
  113. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibesurf.egg-info/top_level.txt +0 -0
  114. {vibesurf-0.1.18 → vibesurf-0.1.20}/vibesurf.spec +0 -0
@@ -18,8 +18,8 @@ MISTRAL_ENDPOINT=https://api.mistral.ai/v1
18
18
 
19
19
  OLLAMA_ENDPOINT=http://localhost:11434
20
20
 
21
- ALIBABA_ENDPOINT=https://dashscope.aliyuncs.com/compatible-mode/v1
22
- ALIBABA_API_KEY=
21
+ DASHSCOPE_ENDPOINT=https://dashscope.aliyuncs.com/compatible-mode/v1
22
+ DASHSCOPE_API_KEY=
23
23
 
24
24
  MOONSHOT_ENDPOINT=https://api.moonshot.cn/v1
25
25
  MOONSHOT_API_KEY=
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vibesurf
3
- Version: 0.1.18
3
+ Version: 0.1.20
4
4
  Summary: VibeSurf: A powerful browser assistant for vibe surfing
5
5
  Author: Shao Warm
6
6
  License: Apache-2.0
@@ -37,11 +37,12 @@ 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.7
40
+ Requires-Dist: browser-use==0.7.8
41
41
  Requires-Dist: markdown-pdf>=1.9
42
42
  Requires-Dist: nanoid>=2.0.0
43
43
  Requires-Dist: markdownify>=1.2.0
44
44
  Requires-Dist: pathvalidate>=3.3.1
45
+ Requires-Dist: dashscope>=1.24.5
45
46
  Dynamic: license-file
46
47
 
47
48
  # VibeSurf: A powerful browser assistant for vibe surfing
@@ -38,11 +38,12 @@ dependencies = [
38
38
  "rich>=13.0.0",
39
39
  "greenlet>=3.2.4",
40
40
  "getmac>=0.9.5",
41
- "browser-use==0.7.7",
41
+ "browser-use==0.7.8",
42
42
  "markdown-pdf>=1.9",
43
43
  "nanoid>=2.0.0",
44
44
  "markdownify>=1.2.0",
45
45
  "pathvalidate>=3.3.1",
46
+ "dashscope>=1.24.5",
46
47
  ]
47
48
 
48
49
  [project.urls]
@@ -0,0 +1,26 @@
1
+ import os
2
+ import pdb
3
+ import time
4
+ import random
5
+ import dashscope
6
+ import sys
7
+
8
+ sys.path.append(".")
9
+
10
+ from dotenv import load_dotenv
11
+
12
+ load_dotenv()
13
+
14
+
15
+ async def test_qwen3_asr_flash():
16
+ from vibe_surf.tools.voice_asr import QwenASR
17
+
18
+ qwen_asr = QwenASR(model="qwen3-asr-flash")
19
+ asr_text = qwen_asr.asr(wav_url="/Users/warmshao/Downloads/qiji-10s.mp3")
20
+ print(asr_text)
21
+
22
+
23
+ if __name__ == "__main__":
24
+ import asyncio
25
+
26
+ asyncio.run(test_qwen3_asr_flash())
@@ -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.18'
32
- __version_tuple__ = version_tuple = (0, 1, 18)
31
+ __version__ = version = '0.1.20'
32
+ __version_tuple__ = version_tuple = (0, 1, 20)
33
33
 
34
- __commit_id__ = commit_id = 'g51b12c120'
34
+ __commit_id__ = commit_id = 'g073ae79d6'
@@ -136,7 +136,7 @@ class ReportWriterAgent:
136
136
  create_result = await self.file_system.create_file(report_filename)
137
137
  logger.info(f"Created report file: {create_result}")
138
138
 
139
- max_iterations = 6 # Prevent infinite loops
139
+ max_iterations = 10 # Prevent infinite loops
140
140
 
141
141
  # Add system message with unified prompt only if message history is empty
142
142
  if not self.message_history:
@@ -0,0 +1,11 @@
1
+ -- Migration: v003_fix_task_status_case.sql
2
+ -- Description: Fix task status values to use lowercase (enum values)
3
+ -- Version: 0.0.3
4
+
5
+ -- Update any uppercase status values to lowercase to match TaskStatus enum
6
+ UPDATE tasks SET status = 'pending' WHERE status = 'PENDING';
7
+ UPDATE tasks SET status = 'running' WHERE status = 'RUNNING';
8
+ UPDATE tasks SET status = 'paused' WHERE status = 'PAUSED';
9
+ UPDATE tasks SET status = 'completed' WHERE status = 'COMPLETED';
10
+ UPDATE tasks SET status = 'failed' WHERE status = 'FAILED';
11
+ UPDATE tasks SET status = 'stopped' WHERE status = 'STOPPED';
@@ -36,6 +36,23 @@
36
36
  <div class="logo-brand">
37
37
  <img src="icons/logo.png" alt="VibeSurf" class="logo-image">
38
38
  <span class="logo-text">VibeSurf</span>
39
+ <div class="social-links">
40
+ <a href="https://github.com/vvincent1234/VibeSurf" class="social-link" title="GitHub" data-platform="github" target="_blank" rel="noopener noreferrer">
41
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
42
+ <path d="M12 0C5.374 0 0 5.373 0 12c0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23A11.509 11.509 0 0112 5.803c1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576C20.566 21.797 24 17.3 24 12c0-6.627-5.373-12-12-12z" fill="currentColor"/>
43
+ </svg>
44
+ </a>
45
+ <a href="https://discord.gg/WSeRwW2M" class="social-link" title="Discord" data-platform="discord" target="_blank" rel="noopener noreferrer">
46
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
47
+ <path d="M20.317 4.37a19.791 19.791 0 00-4.885-1.515.074.074 0 00-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 00-5.487 0 12.64 12.64 0 00-.617-1.25.077.077 0 00-.079-.037A19.736 19.736 0 003.677 4.37a.07.07 0 00-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 00.031.057 19.9 19.9 0 005.993 3.03.078.078 0 00.084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 00-.041-.106 13.107 13.107 0 01-1.872-.892.077.077 0 01-.008-.128 10.2 10.2 0 00.372-.292.074.074 0 01.077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 01.078.01c.12.098.246.198.373.292a.077.077 0 01-.006.127 12.299 12.299 0 01-1.873.892.077.077 0 00-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 00.084.028 19.839 19.839 0 006.002-3.03.077.077 0 00.032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 00-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z" fill="currentColor"/>
48
+ </svg>
49
+ </a>
50
+ <a href="https://x.com/warmshao" class="social-link" title="X (Twitter)" data-platform="x" target="_blank" rel="noopener noreferrer">
51
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
52
+ <path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" fill="currentColor"/>
53
+ </svg>
54
+ </a>
55
+ </div>
39
56
  </div>
40
57
  <div class="session-info">
41
58
  <span class="session-label">Session:</span>
@@ -43,6 +43,61 @@
43
43
  font-weight: var(--font-weight-semibold);
44
44
  }
45
45
 
46
+ /* Social Links */
47
+ .social-links {
48
+ display: flex;
49
+ align-items: center;
50
+ gap: var(--spacing-xs);
51
+ margin-left: var(--spacing-sm);
52
+ }
53
+
54
+ .social-link {
55
+ display: flex;
56
+ align-items: center;
57
+ justify-content: center;
58
+ width: 20px;
59
+ height: 20px;
60
+ border-radius: var(--radius-sm);
61
+ color: var(--text-muted);
62
+ text-decoration: none;
63
+ transition: all var(--transition-fast);
64
+ opacity: 0.7;
65
+ }
66
+
67
+ .social-link:hover {
68
+ color: var(--text-secondary);
69
+ background-color: var(--bg-hover);
70
+ opacity: 1;
71
+ transform: scale(1.1);
72
+ }
73
+
74
+ .social-link:active {
75
+ transform: scale(0.95);
76
+ }
77
+
78
+ .social-link[data-platform="github"]:hover {
79
+ color: #333;
80
+ }
81
+
82
+ .social-link[data-platform="discord"]:hover {
83
+ color: #5865F2;
84
+ }
85
+
86
+ .social-link[data-platform="x"]:hover {
87
+ color: #000;
88
+ }
89
+
90
+ /* Dark mode adjustments for social links */
91
+ @media (prefers-color-scheme: dark) {
92
+ .social-link[data-platform="github"]:hover {
93
+ color: #f0f6fc;
94
+ }
95
+
96
+ .social-link[data-platform="x"]:hover {
97
+ color: #fff;
98
+ }
99
+ }
100
+
46
101
  .logo-image {
47
102
  width: 24px;
48
103
  height: 24px;
@@ -311,6 +311,14 @@ class CustomFileSystem(FileSystem):
311
311
  except Exception as e:
312
312
  return f"Error: Could not write to file '{full_filename}'. {str(e)}"
313
313
 
314
+ async def save_extracted_content(self, content: str) -> str:
315
+ """Save extracted content to a numbered file"""
316
+ initial_filename = f'extracted_content_{self.extracted_content_count}'
317
+ extracted_filename = f'{initial_filename}.md'
318
+ await self.write_file(initial_filename, content)
319
+ self.extracted_content_count += 1
320
+ return f'Extracted content saved to file {extracted_filename} successfully.'
321
+
314
322
  async def list_directory(self, directory_path: str = "") -> str:
315
323
  """List contents of a directory within the file system (data_dir only)"""
316
324
  try:
@@ -0,0 +1,54 @@
1
+ import os
2
+ import pdb
3
+
4
+ import dashscope
5
+ from typing import Optional
6
+ from vibe_surf.logger import get_logger
7
+
8
+ logger = get_logger(__name__)
9
+
10
+ class QwenASR:
11
+ def __init__(self, model="qwen3-asr-flash", api_key: Optional[str] = None):
12
+ dashscope.api_key = api_key or os.getenv("DASHSCOPE_API_KEY")
13
+ self.model = model
14
+
15
+ def asr(self, wav_url: str, context=""):
16
+ if not wav_url.startswith("http"):
17
+ assert os.path.exists(wav_url), f"{wav_url} not exists!"
18
+ wav_url = f"file://{wav_url}"
19
+
20
+ try:
21
+ messages = [
22
+ {
23
+ "role": "system",
24
+ "content": [
25
+ {"text": context},
26
+ ]
27
+ },
28
+ {
29
+ "role": "user",
30
+ "content": [
31
+ {"audio": wav_url},
32
+ ]
33
+ }
34
+ ]
35
+ response = dashscope.MultiModalConversation.call(
36
+ model=self.model,
37
+ messages=messages,
38
+ result_format="message",
39
+ asr_options={
40
+ "enable_lid": True,
41
+ "enable_itn": False
42
+ }
43
+ )
44
+ if response.status_code != 200:
45
+ raise Exception(f"http status_code: {response.status_code} {response}")
46
+ output = response['output']['choices'][0]
47
+ if output['finish_reason'] not in ('stop', 'function_call'):
48
+ logger.warning(f'{self.model} finish with error...\n{response}')
49
+ return ""
50
+ recog_text = output["message"]["content"][0]["text"]
51
+ return recog_text
52
+ except Exception as e:
53
+ logger.warning(str(e))
54
+ return ""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vibesurf
3
- Version: 0.1.18
3
+ Version: 0.1.20
4
4
  Summary: VibeSurf: A powerful browser assistant for vibe surfing
5
5
  Author: Shao Warm
6
6
  License: Apache-2.0
@@ -37,11 +37,12 @@ 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.7
40
+ Requires-Dist: browser-use==0.7.8
41
41
  Requires-Dist: markdown-pdf>=1.9
42
42
  Requires-Dist: nanoid>=2.0.0
43
43
  Requires-Dist: markdownify>=1.2.0
44
44
  Requires-Dist: pathvalidate>=3.3.1
45
+ Requires-Dist: dashscope>=1.24.5
45
46
  Dynamic: license-file
46
47
 
47
48
  # VibeSurf: A powerful browser assistant for vibe surfing
@@ -37,6 +37,7 @@ vibesurf.spec
37
37
  ./vibe_surf/backend/database/schemas.py
38
38
  ./vibe_surf/backend/database/migrations/v001_initial_schema.sql
39
39
  ./vibe_surf/backend/database/migrations/v002_add_agent_mode.sql
40
+ ./vibe_surf/backend/database/migrations/v003_fix_task_status_case.sql
40
41
  ./vibe_surf/backend/utils/__init__.py
41
42
  ./vibe_surf/backend/utils/encryption.py
42
43
  ./vibe_surf/backend/utils/llm_factory.py
@@ -92,6 +93,7 @@ vibesurf.spec
92
93
  ./vibe_surf/tools/report_writer_tools.py
93
94
  ./vibe_surf/tools/vibesurf_tools.py
94
95
  ./vibe_surf/tools/views.py
96
+ ./vibe_surf/tools/voice_asr.py
95
97
  .github/workflows/publish.yml
96
98
  docs/EXECUTABLE_BUILD.md
97
99
  docs/PYPI_SETUP.md
@@ -101,6 +103,7 @@ tests/test_agents.py
101
103
  tests/test_backend_api.py
102
104
  tests/test_browser.py
103
105
  tests/test_tools.py
106
+ tests/test_voice_api.py
104
107
  vibe_surf/__init__.py
105
108
  vibe_surf/cli.py
106
109
  vibe_surf/common.py
@@ -131,6 +134,7 @@ vibe_surf/backend/database/queries.py
131
134
  vibe_surf/backend/database/schemas.py
132
135
  vibe_surf/backend/database/migrations/v001_initial_schema.sql
133
136
  vibe_surf/backend/database/migrations/v002_add_agent_mode.sql
137
+ vibe_surf/backend/database/migrations/v003_fix_task_status_case.sql
134
138
  vibe_surf/backend/utils/__init__.py
135
139
  vibe_surf/backend/utils/encryption.py
136
140
  vibe_surf/backend/utils/llm_factory.py
@@ -186,6 +190,7 @@ vibe_surf/tools/mcp_client.py
186
190
  vibe_surf/tools/report_writer_tools.py
187
191
  vibe_surf/tools/vibesurf_tools.py
188
192
  vibe_surf/tools/views.py
193
+ vibe_surf/tools/voice_asr.py
189
194
  vibesurf.egg-info/PKG-INFO
190
195
  vibesurf.egg-info/SOURCES.txt
191
196
  vibesurf.egg-info/dependency_links.txt
@@ -19,8 +19,9 @@ aiosqlite>=0.21.0
19
19
  rich>=13.0.0
20
20
  greenlet>=3.2.4
21
21
  getmac>=0.9.5
22
- browser-use==0.7.7
22
+ browser-use==0.7.8
23
23
  markdown-pdf>=1.9
24
24
  nanoid>=2.0.0
25
25
  markdownify>=1.2.0
26
26
  pathvalidate>=3.3.1
27
+ dashscope>=1.24.5
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