vibesurf 0.1.31__py3-none-any.whl → 0.1.32__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.31'
32
- __version_tuple__ = version_tuple = (0, 1, 31)
31
+ __version__ = version = '0.1.32'
32
+ __version_tuple__ = version_tuple = (0, 1, 32)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -479,7 +479,7 @@ async def _vibesurf_agent_node_impl(state: VibeSurfState) -> VibeSurfState:
479
479
  llm=vibesurf_agent.llm,
480
480
  file_system=vibesurf_agent.file_system,
481
481
  )
482
- if action_name.startswith("skill_"):
482
+ if action_name in ['skill_search', 'skill_crawl', 'skill_summary', 'skill_deep_research']:
483
483
  state.current_step = "END"
484
484
  # Format final response
485
485
  final_response = f"{result.extracted_content}" or f"{result.error}"
@@ -594,93 +594,93 @@ class BrowserUseTools(Tools, VibeSurfTools):
594
594
  logger.error(error_msg)
595
595
  return ActionResult(error=error_msg)
596
596
 
597
- async def _detect_file_format(self, url: str, headers: dict, content: bytes) -> str:
598
- """Detect file format from URL, headers, and content"""
599
-
600
- # Try Content-Type header first
601
- content_type = headers.get('content-type', '').lower()
602
- if content_type:
603
- # Common image formats
604
- if 'image/jpeg' in content_type or 'image/jpg' in content_type:
605
- return '.jpg'
606
- elif 'image/png' in content_type:
607
- return '.png'
608
- elif 'image/gif' in content_type:
609
- return '.gif'
610
- elif 'image/webp' in content_type:
611
- return '.webp'
612
- elif 'image/svg' in content_type:
613
- return '.svg'
614
- elif 'image/bmp' in content_type:
615
- return '.bmp'
616
- elif 'image/tiff' in content_type:
617
- return '.tiff'
618
- # Video formats
619
- elif 'video/mp4' in content_type:
620
- return '.mp4'
621
- elif 'video/webm' in content_type:
622
- return '.webm'
623
- elif 'video/avi' in content_type:
624
- return '.avi'
625
- elif 'video/mov' in content_type or 'video/quicktime' in content_type:
626
- return '.mov'
627
- # Audio formats
628
- elif 'audio/mpeg' in content_type or 'audio/mp3' in content_type:
629
- return '.mp3'
630
- elif 'audio/wav' in content_type:
631
- return '.wav'
632
- elif 'audio/ogg' in content_type:
633
- return '.ogg'
634
- elif 'audio/webm' in content_type:
635
- return '.webm'
636
-
637
- # Try magic number detection
638
- if len(content) >= 8:
639
- # JPEG
640
- if content.startswith(b'\xff\xd8\xff'):
641
- return '.jpg'
642
- # PNG
643
- elif content.startswith(b'\x89PNG\r\n\x1a\n'):
644
- return '.png'
645
- # GIF
646
- elif content.startswith(b'GIF87a') or content.startswith(b'GIF89a'):
647
- return '.gif'
648
- # WebP
649
- elif content[8:12] == b'WEBP':
650
- return '.webp'
651
- # BMP
652
- elif content.startswith(b'BM'):
653
- return '.bmp'
654
- # TIFF
655
- elif content.startswith(b'II*\x00') or content.startswith(b'MM\x00*'):
656
- return '.tiff'
657
- # MP4
658
- elif b'ftyp' in content[4:12]:
659
- return '.mp4'
660
- # PDF
661
- elif content.startswith(b'%PDF'):
662
- return '.pdf'
663
-
664
- # Try URL path extension
665
- url_path = urllib.parse.urlparse(url).path
666
- if url_path:
667
- ext = os.path.splitext(url_path)[1].lower()
668
- if ext in ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.svg', '.bmp', '.tiff',
669
- '.mp4', '.webm', '.avi', '.mov', '.wmv', '.flv',
670
- '.mp3', '.wav', '.ogg', '.aac', '.flac',
671
- '.pdf', '.doc', '.docx', '.txt']:
672
- return ext
673
-
674
- # Default fallback
675
- return '.bin'
676
-
677
- def _format_file_size(self, size_bytes: int) -> str:
678
- """Format file size in human readable format"""
679
- if size_bytes == 0:
680
- return "0 B"
681
- size_names = ["B", "KB", "MB", "GB", "TB"]
682
- i = 0
683
- while size_bytes >= 1024.0 and i < len(size_names) - 1:
684
- size_bytes /= 1024.0
685
- i += 1
686
- return f"{size_bytes:.1f} {size_names[i]}"
597
+ async def _detect_file_format(self, url: str, headers: dict, content: bytes) -> str:
598
+ """Detect file format from URL, headers, and content"""
599
+
600
+ # Try Content-Type header first
601
+ content_type = headers.get('content-type', '').lower()
602
+ if content_type:
603
+ # Common image formats
604
+ if 'image/jpeg' in content_type or 'image/jpg' in content_type:
605
+ return '.jpg'
606
+ elif 'image/png' in content_type:
607
+ return '.png'
608
+ elif 'image/gif' in content_type:
609
+ return '.gif'
610
+ elif 'image/webp' in content_type:
611
+ return '.webp'
612
+ elif 'image/svg' in content_type:
613
+ return '.svg'
614
+ elif 'image/bmp' in content_type:
615
+ return '.bmp'
616
+ elif 'image/tiff' in content_type:
617
+ return '.tiff'
618
+ # Video formats
619
+ elif 'video/mp4' in content_type:
620
+ return '.mp4'
621
+ elif 'video/webm' in content_type:
622
+ return '.webm'
623
+ elif 'video/avi' in content_type:
624
+ return '.avi'
625
+ elif 'video/mov' in content_type or 'video/quicktime' in content_type:
626
+ return '.mov'
627
+ # Audio formats
628
+ elif 'audio/mpeg' in content_type or 'audio/mp3' in content_type:
629
+ return '.mp3'
630
+ elif 'audio/wav' in content_type:
631
+ return '.wav'
632
+ elif 'audio/ogg' in content_type:
633
+ return '.ogg'
634
+ elif 'audio/webm' in content_type:
635
+ return '.webm'
636
+
637
+ # Try magic number detection
638
+ if len(content) >= 8:
639
+ # JPEG
640
+ if content.startswith(b'\xff\xd8\xff'):
641
+ return '.jpg'
642
+ # PNG
643
+ elif content.startswith(b'\x89PNG\r\n\x1a\n'):
644
+ return '.png'
645
+ # GIF
646
+ elif content.startswith(b'GIF87a') or content.startswith(b'GIF89a'):
647
+ return '.gif'
648
+ # WebP
649
+ elif content[8:12] == b'WEBP':
650
+ return '.webp'
651
+ # BMP
652
+ elif content.startswith(b'BM'):
653
+ return '.bmp'
654
+ # TIFF
655
+ elif content.startswith(b'II*\x00') or content.startswith(b'MM\x00*'):
656
+ return '.tiff'
657
+ # MP4
658
+ elif b'ftyp' in content[4:12]:
659
+ return '.mp4'
660
+ # PDF
661
+ elif content.startswith(b'%PDF'):
662
+ return '.pdf'
663
+
664
+ # Try URL path extension
665
+ url_path = urllib.parse.urlparse(url).path
666
+ if url_path:
667
+ ext = os.path.splitext(url_path)[1].lower()
668
+ if ext in ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.svg', '.bmp', '.tiff',
669
+ '.mp4', '.webm', '.avi', '.mov', '.wmv', '.flv',
670
+ '.mp3', '.wav', '.ogg', '.aac', '.flac',
671
+ '.pdf', '.doc', '.docx', '.txt']:
672
+ return ext
673
+
674
+ # Default fallback
675
+ return '.bin'
676
+
677
+ def _format_file_size(self, size_bytes: int) -> str:
678
+ """Format file size in human readable format"""
679
+ if size_bytes == 0:
680
+ return "0 B"
681
+ size_names = ["B", "KB", "MB", "GB", "TB"]
682
+ i = 0
683
+ while size_bytes >= 1024.0 and i < len(size_names) - 1:
684
+ size_bytes /= 1024.0
685
+ i += 1
686
+ return f"{size_bytes:.1f} {size_names[i]}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vibesurf
3
- Version: 0.1.31
3
+ Version: 0.1.32
4
4
  Summary: VibeSurf: A powerful browser assistant for vibe surfing
5
5
  Author: WarmShao
6
6
  License: Apache-2.0
@@ -1,12 +1,12 @@
1
1
  vibe_surf/__init__.py,sha256=WtduuMFGauMD_9dpk4fnRnLTAP6ka9Lfu0feAFNzLfo,339
2
- vibe_surf/_version.py,sha256=L87EssWopAuMph5lZqUKxrS1nQEgv6aCJfmdUfQfh9k,706
2
+ vibe_surf/_version.py,sha256=bOrloXQ1niy48uSx3m2DBfma1avGekphNS__F9F-ybA,706
3
3
  vibe_surf/cli.py,sha256=tTPkQqkW_jW154C9U2C2qgQtqblaskmsWFBlqPd-LMc,16598
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=jeUYV7yk6vyycw6liju_597GdjB3CW_B2wEhn2F0ekk,45957
8
8
  vibe_surf/agents/report_writer_agent.py,sha256=pCF2k6VLyO-sSviGBqqIyVD3SLqaZtSqiW3kvNfPY1I,20967
9
- vibe_surf/agents/vibe_surf_agent.py,sha256=VoybehPeO4lymN6524eOkHIezFIp6ZabWSE_e5CbyZM,74217
9
+ vibe_surf/agents/vibe_surf_agent.py,sha256=z0lyF9FvO25cJDOZik2s_NgJ9bwtMYZagaklN8yID1g,74271
10
10
  vibe_surf/agents/views.py,sha256=yHjNJloa-aofVTGyuRy08tBYP_Y3XLqt1DUWOUmHRng,4825
11
11
  vibe_surf/agents/prompts/__init__.py,sha256=l4ieA0D8kLJthyNN85FKLNe4ExBa3stY3l-aImLDRD0,36
12
12
  vibe_surf/agents/prompts/report_writer_prompt.py,sha256=sZE8MUT1CDLmRzbnbEQzAvTwJjpITgh2Q8g1_eXmkzE,4454
@@ -88,7 +88,7 @@ vibe_surf/chrome_extension/styles/variables.css,sha256=enjyhsa0PeU3b-3uiXa-VkV-1
88
88
  vibe_surf/llm/__init__.py,sha256=_vDVPo6STf343p1SgMQrF5023hicAx0g83pK2Gbk4Ek,601
89
89
  vibe_surf/llm/openai_compatible.py,sha256=i0a5OLaL6QIlacVyctOG09vKr3KOi8T8Izp1v7xkD5I,16112
90
90
  vibe_surf/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
- vibe_surf/tools/browser_use_tools.py,sha256=2bfttOq_pxNNVIc_NHinQzXMvMW6oTZNYFr4pvGNQYg,32313
91
+ vibe_surf/tools/browser_use_tools.py,sha256=kvDUMQY4ScrTIs1jxF4JbsDK39W3ti283KKrjf35e2A,31925
92
92
  vibe_surf/tools/file_system.py,sha256=Tw_6J5QjCahQ3fd26CXziF1zPvRxhYM0889oK4bDhlU,19304
93
93
  vibe_surf/tools/finance_tools.py,sha256=E8rmblp57e_cp0tFbdZ7BY3_upNlk4Whk0bYc_SFCJE,27284
94
94
  vibe_surf/tools/mcp_client.py,sha256=OeCoTgyx4MoY7JxXndK6pGHIoyFOhf5r7XCbx25y1Ec,2446
@@ -110,9 +110,9 @@ vibe_surf/tools/website_api/xhs/helpers.py,sha256=Dq2RyYKClBQ2ha2yEfpS1mtZswx0z9
110
110
  vibe_surf/tools/website_api/youtube/__init__.py,sha256=QWmZWSqo1O6XtaWP-SuL3HrBLYINjEWEyOy-KCytGDw,1145
111
111
  vibe_surf/tools/website_api/youtube/client.py,sha256=hq25WU9Ot19hMaVjlSLmQH660A15OSmai5u60HcjLc8,51452
112
112
  vibe_surf/tools/website_api/youtube/helpers.py,sha256=GPgqfNirLYjIpk1OObvoXd2Ktq-ahKOOKHO2WwQVXCw,12931
113
- vibesurf-0.1.31.dist-info/licenses/LICENSE,sha256=vRmTjOYvD8RLiSGYYmFHnveYNswtO1uvSk1sd-Eu7sg,2037
114
- vibesurf-0.1.31.dist-info/METADATA,sha256=qnmIusJp5lt4QSx58e8ZtDa-aChrh525K0nHZmGLoAg,6153
115
- vibesurf-0.1.31.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
116
- vibesurf-0.1.31.dist-info/entry_points.txt,sha256=UxqpvMocL-PR33S6vLF2OmXn-kVzM-DneMeZeHcPMM8,48
117
- vibesurf-0.1.31.dist-info/top_level.txt,sha256=VPZGHqSb6EEqcJ4ZX6bHIuWfon5f6HXl3c7BYpbRqnY,10
118
- vibesurf-0.1.31.dist-info/RECORD,,
113
+ vibesurf-0.1.32.dist-info/licenses/LICENSE,sha256=vRmTjOYvD8RLiSGYYmFHnveYNswtO1uvSk1sd-Eu7sg,2037
114
+ vibesurf-0.1.32.dist-info/METADATA,sha256=aFcIzRLOinCst-6iVvV9MGYef1VTTd86rL2GvXoSk8M,6153
115
+ vibesurf-0.1.32.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
116
+ vibesurf-0.1.32.dist-info/entry_points.txt,sha256=UxqpvMocL-PR33S6vLF2OmXn-kVzM-DneMeZeHcPMM8,48
117
+ vibesurf-0.1.32.dist-info/top_level.txt,sha256=VPZGHqSb6EEqcJ4ZX6bHIuWfon5f6HXl3c7BYpbRqnY,10
118
+ vibesurf-0.1.32.dist-info/RECORD,,