vibesurf 0.1.18__py3-none-any.whl → 0.1.20__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of vibesurf might be problematic. Click here for more details.

vibe_surf/_version.py CHANGED
@@ -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
34
  __commit_id__ = commit_id = None
@@ -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
@@ -1,11 +1,11 @@
1
1
  vibe_surf/__init__.py,sha256=WtduuMFGauMD_9dpk4fnRnLTAP6ka9Lfu0feAFNzLfo,339
2
- vibe_surf/_version.py,sha256=Nx3lULyklTDQB2p2ofjQ59zAxYunJHGjMIsvHePGZsI,706
2
+ vibe_surf/_version.py,sha256=P88Jfo9OvOr8LB0vHFqLUwFR7A0eE281KxEewbcCSBc,706
3
3
  vibe_surf/cli.py,sha256=pbep2dBeQqralZ8AggkH4h2nayBarbdN8lhZxo35gNU,16689
4
4
  vibe_surf/common.py,sha256=_WWMxen5wFwzUjEShn3yDVC1OBFUiJ6Vccadi6tuG6w,1215
5
5
  vibe_surf/logger.py,sha256=k53MFA96QX6t9OfcOf1Zws8PP0OOqjVJfhUD3Do9lKw,3043
6
6
  vibe_surf/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  vibe_surf/agents/browser_use_agent.py,sha256=qmm3TAVzEYjvOvSQEa5xUZOgpBOR_8qePME8BjLjOd0,45951
8
- vibe_surf/agents/report_writer_agent.py,sha256=0RZHcrk6WoC7GE66QshrPLt6ka7GlRtnCsgjO7Dfxfw,20966
8
+ vibe_surf/agents/report_writer_agent.py,sha256=pCF2k6VLyO-sSviGBqqIyVD3SLqaZtSqiW3kvNfPY1I,20967
9
9
  vibe_surf/agents/vibe_surf_agent.py,sha256=i7O4Djw3Pd1ijwbkGbXkQqO1y0RunlelCqajjfJFfaQ,73687
10
10
  vibe_surf/agents/views.py,sha256=yHjNJloa-aofVTGyuRy08tBYP_Y3XLqt1DUWOUmHRng,4825
11
11
  vibe_surf/agents/prompts/__init__.py,sha256=l4ieA0D8kLJthyNN85FKLNe4ExBa3stY3l-aImLDRD0,36
@@ -29,6 +29,7 @@ vibe_surf/backend/database/queries.py,sha256=WEXZBNHQ1LWWR4Bv-49LMs8mZOkapFBx2_v
29
29
  vibe_surf/backend/database/schemas.py,sha256=OPnpRKwYG1Cu8geJ6pajiEDF8x8mRestXnAfI4Gy18w,3402
30
30
  vibe_surf/backend/database/migrations/v001_initial_schema.sql,sha256=MC2fa1WHUEhHhdOTxz0qB4RI7JdGRpiGXZ77ytl3LRQ,4345
31
31
  vibe_surf/backend/database/migrations/v002_add_agent_mode.sql,sha256=jKnW28HsphUeU9kudEx9QaLnUh8swmmOt-hFsZJay24,251
32
+ vibe_surf/backend/database/migrations/v003_fix_task_status_case.sql,sha256=npzRgEnKymTzvb-nOZHtycjVyWX2Dx0tCEtrZJfcujg,580
32
33
  vibe_surf/backend/utils/__init__.py,sha256=V8leMFp7apAglUAoCHPZrNNcRHthSLYIudIJE5qwjb0,184
33
34
  vibe_surf/backend/utils/encryption.py,sha256=CjLNh_n0Luhfa-6BB-icfzkiiDqj5b4Gu6MADU3p2eM,3754
34
35
  vibe_surf/backend/utils/llm_factory.py,sha256=mNy8o3sw7vYJ8gwiTsrgXbG7Ri_B11ylE4KGcfHULp8,8972
@@ -46,7 +47,7 @@ vibe_surf/chrome_extension/content.js,sha256=q6JRpmHAEdPWNnFSIqoPv8eBm0T574c3H5h
46
47
  vibe_surf/chrome_extension/dev-reload.js,sha256=xQpi-1Ekb5P8Ogsm6rUK09QzxafwH0H409zBKmaUFNw,1790
47
48
  vibe_surf/chrome_extension/manifest.json,sha256=B08nHuU-bPc-pUr30Y-of39TjMlrE7D5gP2sZjZ8CrE,1142
48
49
  vibe_surf/chrome_extension/popup.html,sha256=n3dI_-WbILm0q8O_za6xX0WvOofz5lwT_7YXs0u9RAE,4248
49
- vibe_surf/chrome_extension/sidepanel.html,sha256=v6FBuKsKIZ5Mvup44rzoJsKV9gBH1ypvr25nu3j2yBk,26268
50
+ vibe_surf/chrome_extension/sidepanel.html,sha256=UuFTM_32LU3aYpem8o0muhW4FvOdu-7uyfY-tHgArXw,29639
50
51
  vibe_surf/chrome_extension/icons/convert-svg.js,sha256=j137nZA7MJK35NtrwWff8yb3UEKa5XTAvnV6EjY-CVI,953
51
52
  vibe_surf/chrome_extension/icons/logo-preview.html,sha256=hrgU45uziKHKIb8be9P4ZrZJyGggWnm2M5oEu89V5sM,6962
52
53
  vibe_surf/chrome_extension/icons/logo.icns,sha256=ZzY1eIKF4dNhNW4CeE1UBQloxNVC7bQx3qcClo3CnMQ,1569615
@@ -66,7 +67,7 @@ vibe_surf/chrome_extension/styles/base.css,sha256=d8nt7Wej1r57G6pnBIGKEVkepFxlq8
66
67
  vibe_surf/chrome_extension/styles/components.css,sha256=cbpYgT1ujG11axRa9xnHizgm4wfrpSzq_nkUOdfNZ0A,18495
67
68
  vibe_surf/chrome_extension/styles/history-modal.css,sha256=xCg0EPz1N4kg47jnz9q9E1M4zGag8lJMt_msAOkZi3M,16583
68
69
  vibe_surf/chrome_extension/styles/input.css,sha256=7gmWfXbm3CHPEPHtzwSwAtGeNGJtzrect7yYy57rnEo,10745
69
- vibe_surf/chrome_extension/styles/layout.css,sha256=ggh-lWpP6sHubFkshf9dcmA52LiXw7VJmQXcM5_EGcY,3528
70
+ vibe_surf/chrome_extension/styles/layout.css,sha256=ejX3qZnPrObzynf3XLwqurLI1ZaGKx41dj9ypdeBP28,4522
70
71
  vibe_surf/chrome_extension/styles/responsive.css,sha256=a_SFX-PeOcenG4xMeoru5XFnnXdf0YhEyRzvTVVZHdI,8529
71
72
  vibe_surf/chrome_extension/styles/settings-environment.css,sha256=OzgezmfZZ_yD60Jy9Uiq83mDmMCfk2dPPcZISb9Eqd4,3390
72
73
  vibe_surf/chrome_extension/styles/settings-forms.css,sha256=alBDabKacyxw0kf116Lr8WU4bjdWqTDht01MtIRMjj4,6970
@@ -79,14 +80,15 @@ vibe_surf/llm/__init__.py,sha256=_vDVPo6STf343p1SgMQrF5023hicAx0g83pK2Gbk4Ek,601
79
80
  vibe_surf/llm/openai_compatible.py,sha256=8v0LW_-ZoKv4gcO--6_SmU_BLF8XCJaiPxZ6kXFgM4I,14998
80
81
  vibe_surf/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
82
  vibe_surf/tools/browser_use_tools.py,sha256=gWiBj-YPz7kQYi0yekuvpPQ2Z2-EBLuutF6rf71iOcM,28781
82
- vibe_surf/tools/file_system.py,sha256=gVdTd6qUfoyVfZMzmX9DXTyBbfXY56jVhUqtfm1qqps,18878
83
+ vibe_surf/tools/file_system.py,sha256=PKRHe3EuOl78zzrA4SFiz1DDJotzx7OmszZqQMipQ-k,19317
83
84
  vibe_surf/tools/mcp_client.py,sha256=OeCoTgyx4MoY7JxXndK6pGHIoyFOhf5r7XCbx25y1Ec,2446
84
85
  vibe_surf/tools/report_writer_tools.py,sha256=sUqUFr-_Rs8RJ0Bs77Hrp07kNwRIvHv7ErzSPYSlbTg,705
85
86
  vibe_surf/tools/vibesurf_tools.py,sha256=VVhM2IZOXwpGvJ3v9jTXFHmxTxF2jAzhrwqFqxFVuX4,29976
86
87
  vibe_surf/tools/views.py,sha256=aPoabrXOCrn5vPCAauMKYvpyP9n0qC2xKn1IbjAGXwE,4218
87
- vibesurf-0.1.18.dist-info/licenses/LICENSE,sha256=czn6QYya0-jhLnStD9JqnMS-hwP5wRByipkrGTvoXLI,11355
88
- vibesurf-0.1.18.dist-info/METADATA,sha256=mjOB-WCoPaiYkC7DdXeZ72AxYVwvHWakSmlTcEc6FnE,5313
89
- vibesurf-0.1.18.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
90
- vibesurf-0.1.18.dist-info/entry_points.txt,sha256=UxqpvMocL-PR33S6vLF2OmXn-kVzM-DneMeZeHcPMM8,48
91
- vibesurf-0.1.18.dist-info/top_level.txt,sha256=VPZGHqSb6EEqcJ4ZX6bHIuWfon5f6HXl3c7BYpbRqnY,10
92
- vibesurf-0.1.18.dist-info/RECORD,,
88
+ vibe_surf/tools/voice_asr.py,sha256=iBMzPSXYDtAbalr-lwzsGVKQPbR0Cj2lvsKSLKyEcU8,1790
89
+ vibesurf-0.1.20.dist-info/licenses/LICENSE,sha256=czn6QYya0-jhLnStD9JqnMS-hwP5wRByipkrGTvoXLI,11355
90
+ vibesurf-0.1.20.dist-info/METADATA,sha256=EvLwKDgeGFER75FSHwSj8koN5g02vwROXU-fl0rHXm0,5346
91
+ vibesurf-0.1.20.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
92
+ vibesurf-0.1.20.dist-info/entry_points.txt,sha256=UxqpvMocL-PR33S6vLF2OmXn-kVzM-DneMeZeHcPMM8,48
93
+ vibesurf-0.1.20.dist-info/top_level.txt,sha256=VPZGHqSb6EEqcJ4ZX6bHIuWfon5f6HXl3c7BYpbRqnY,10
94
+ vibesurf-0.1.20.dist-info/RECORD,,