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 +2 -2
- vibe_surf/agents/vibe_surf_agent.py +1 -1
- vibe_surf/tools/browser_use_tools.py +90 -90
- {vibesurf-0.1.31.dist-info → vibesurf-0.1.32.dist-info}/METADATA +1 -1
- {vibesurf-0.1.31.dist-info → vibesurf-0.1.32.dist-info}/RECORD +9 -9
- {vibesurf-0.1.31.dist-info → vibesurf-0.1.32.dist-info}/WHEEL +0 -0
- {vibesurf-0.1.31.dist-info → vibesurf-0.1.32.dist-info}/entry_points.txt +0 -0
- {vibesurf-0.1.31.dist-info → vibesurf-0.1.32.dist-info}/licenses/LICENSE +0 -0
- {vibesurf-0.1.31.dist-info → vibesurf-0.1.32.dist-info}/top_level.txt +0 -0
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.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 1,
|
|
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
|
|
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
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
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,12 +1,12 @@
|
|
|
1
1
|
vibe_surf/__init__.py,sha256=WtduuMFGauMD_9dpk4fnRnLTAP6ka9Lfu0feAFNzLfo,339
|
|
2
|
-
vibe_surf/_version.py,sha256=
|
|
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=
|
|
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=
|
|
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.
|
|
114
|
-
vibesurf-0.1.
|
|
115
|
-
vibesurf-0.1.
|
|
116
|
-
vibesurf-0.1.
|
|
117
|
-
vibesurf-0.1.
|
|
118
|
-
vibesurf-0.1.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|