vibesurf 0.1.10__py3-none-any.whl → 0.1.11__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.

Files changed (51) hide show
  1. vibe_surf/_version.py +2 -2
  2. vibe_surf/agents/browser_use_agent.py +68 -45
  3. vibe_surf/agents/prompts/report_writer_prompt.py +73 -0
  4. vibe_surf/agents/prompts/vibe_surf_prompt.py +85 -172
  5. vibe_surf/agents/report_writer_agent.py +380 -226
  6. vibe_surf/agents/vibe_surf_agent.py +879 -825
  7. vibe_surf/agents/views.py +130 -0
  8. vibe_surf/backend/api/activity.py +3 -1
  9. vibe_surf/backend/api/browser.py +9 -5
  10. vibe_surf/backend/api/config.py +8 -5
  11. vibe_surf/backend/api/files.py +59 -50
  12. vibe_surf/backend/api/models.py +2 -2
  13. vibe_surf/backend/api/task.py +45 -12
  14. vibe_surf/backend/database/manager.py +24 -18
  15. vibe_surf/backend/database/queries.py +199 -192
  16. vibe_surf/backend/database/schemas.py +1 -1
  17. vibe_surf/backend/main.py +4 -2
  18. vibe_surf/backend/shared_state.py +28 -35
  19. vibe_surf/backend/utils/encryption.py +3 -1
  20. vibe_surf/backend/utils/llm_factory.py +41 -36
  21. vibe_surf/browser/agent_browser_session.py +0 -4
  22. vibe_surf/browser/browser_manager.py +14 -8
  23. vibe_surf/browser/utils.py +5 -3
  24. vibe_surf/browser/watchdogs/dom_watchdog.py +0 -45
  25. vibe_surf/chrome_extension/background.js +4 -0
  26. vibe_surf/chrome_extension/scripts/api-client.js +13 -0
  27. vibe_surf/chrome_extension/scripts/file-manager.js +27 -71
  28. vibe_surf/chrome_extension/scripts/session-manager.js +21 -3
  29. vibe_surf/chrome_extension/scripts/ui-manager.js +831 -48
  30. vibe_surf/chrome_extension/sidepanel.html +21 -4
  31. vibe_surf/chrome_extension/styles/activity.css +365 -5
  32. vibe_surf/chrome_extension/styles/input.css +139 -0
  33. vibe_surf/cli.py +4 -22
  34. vibe_surf/common.py +35 -0
  35. vibe_surf/llm/openai_compatible.py +148 -93
  36. vibe_surf/logger.py +99 -0
  37. vibe_surf/{controller/vibesurf_tools.py → tools/browser_use_tools.py} +233 -219
  38. vibe_surf/tools/file_system.py +415 -0
  39. vibe_surf/{controller → tools}/mcp_client.py +4 -3
  40. vibe_surf/tools/report_writer_tools.py +21 -0
  41. vibe_surf/tools/vibesurf_tools.py +657 -0
  42. vibe_surf/tools/views.py +120 -0
  43. {vibesurf-0.1.10.dist-info → vibesurf-0.1.11.dist-info}/METADATA +6 -2
  44. {vibesurf-0.1.10.dist-info → vibesurf-0.1.11.dist-info}/RECORD +49 -43
  45. vibe_surf/controller/file_system.py +0 -53
  46. vibe_surf/controller/views.py +0 -37
  47. /vibe_surf/{controller → tools}/__init__.py +0 -0
  48. {vibesurf-0.1.10.dist-info → vibesurf-0.1.11.dist-info}/WHEEL +0 -0
  49. {vibesurf-0.1.10.dist-info → vibesurf-0.1.11.dist-info}/entry_points.txt +0 -0
  50. {vibesurf-0.1.10.dist-info → vibesurf-0.1.11.dist-info}/licenses/LICENSE +0 -0
  51. {vibesurf-0.1.10.dist-info → vibesurf-0.1.11.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,120 @@
1
+ from typing import Generic, TypeVar
2
+ from pydantic import BaseModel, ConfigDict, Field
3
+
4
+
5
+ class HoverAction(BaseModel):
6
+ """Parameters for hover action"""
7
+ index: int | None = None
8
+ xpath: str | None = None
9
+ selector: str | None = None
10
+
11
+
12
+ class ExtractionAction(BaseModel):
13
+ query: str = Field(
14
+ default="summary this page",
15
+ description='Extraction goal',
16
+ )
17
+ extract_links: bool | None = Field(
18
+ default=False,
19
+ description='Whether to extract links',
20
+ )
21
+ tab_id: str | None = Field(
22
+ default=None,
23
+ min_length=4,
24
+ max_length=4,
25
+ description='exact 4 character Tab ID of the tab for extraction',
26
+ ) # last 4 chars of TargetID
27
+
28
+
29
+ class FileExtractionAction(BaseModel):
30
+ """Parameters for file content extraction action"""
31
+ file_path: str = Field(
32
+ description='Path to the file to extract content from',
33
+ )
34
+ query: str = Field(
35
+ default="Extract and summarize the content from this file",
36
+ description='Query or instruction for content extraction',
37
+ )
38
+
39
+
40
+ class BrowserUseAgentTask(BaseModel):
41
+ """Parameters for a single browser_use agent task"""
42
+ tab_id: str | None = Field(
43
+ default=None,
44
+ description='Tab ID to execute the task on. If None, a new blank page will be created',
45
+ )
46
+ task: str = Field(
47
+ description='Task description focusing on what needs to be done, goals, and expected returns. Browser_use agent has its own planning and execution capabilities',
48
+ )
49
+ task_files: list[str] | None = Field(
50
+ default=None,
51
+ description='Optional list of file paths that may be needed for executing this task',
52
+ )
53
+
54
+
55
+ class BrowserUseAgentExecution(BaseModel):
56
+ """Parameters for executing browser_use agent tasks in parallel"""
57
+ tasks: list[BrowserUseAgentTask] = Field(
58
+ description='List of tasks to execute concurrently using browser_use agents for improved efficiency. '
59
+ 'If only one task is provided, the agent can take over the entire browser and can also see and operate all tabs.',
60
+ min_length=1,
61
+ )
62
+
63
+ class BrowserUseFile(BaseModel):
64
+ file_path: str = Field(description='Path to the file')
65
+ file_description: str = Field(
66
+ description='Description of the file. Briefly describe what this file is and what key information it contains.',
67
+ )
68
+
69
+
70
+ class BrowserUseDoneAction(BaseModel):
71
+ """Parameters for done browser_use agent tasks"""
72
+ text: str
73
+ files_to_return: list[BrowserUseFile] | None = Field(
74
+ description='List of files relative to user request or task.',
75
+ )
76
+
77
+
78
+ class ReportWriterTask(BaseModel):
79
+ """Parameters for report writer agent task"""
80
+ task: str = Field(
81
+ description='Task description including report requirements, goals, insights seen, and any hints or tips for generating the report',
82
+ )
83
+
84
+
85
+ class TodoGenerateAction(BaseModel):
86
+ """Parameters for generating todo.md file"""
87
+ todo_items: list[str] = Field(
88
+ description='List of todo items to write to todo.md file',
89
+ min_length=1,
90
+ )
91
+
92
+
93
+ class TodoModification(BaseModel):
94
+ """Single todo modification operation"""
95
+ action: str = Field(
96
+ description='Type of modification: "add", "remove", "complete", or "uncompleted"',
97
+ )
98
+ item: str = Field(
99
+ description='Text of the todo item to operate on',
100
+ )
101
+
102
+
103
+ class TodoModifyAction(BaseModel):
104
+ """Parameters for modifying todo items"""
105
+ modifications: list[TodoModification] = Field(
106
+ description='List of todo modifications to apply',
107
+ min_length=1,
108
+ )
109
+
110
+
111
+ class VibeSurfDoneAction(BaseModel):
112
+ """Parameters for task completion output"""
113
+ response: str = Field(
114
+ description='Task completion response - can be simple response for basic tasks or comprehensive markdown summary for complex tasks with key findings, results, and file links',
115
+ )
116
+ suggestion_follow_tasks: list[str] | None = Field(
117
+ default=None,
118
+ description='Optional list of 1-3 suggested follow-up tasks. Each task can only be described in one sentence, and each task must be strongly related to or extended from the original task.',
119
+ max_length=3,
120
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vibesurf
3
- Version: 0.1.10
3
+ Version: 0.1.11
4
4
  Summary: VibeSurf: A powerful browser assistant for vibe surfing
5
5
  Author: Shao Warm
6
6
  License: Apache-2.0
@@ -37,7 +37,11 @@ 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.1
40
+ Requires-Dist: browser-use==0.7.7
41
+ Requires-Dist: markdown-pdf>=1.9
42
+ Requires-Dist: nanoid>=2.0.0
43
+ Requires-Dist: markdownify>=1.2.0
44
+ Requires-Dist: pathvalidate>=3.3.1
41
45
  Dynamic: license-file
42
46
 
43
47
  # VibeSurf: A powerful browser assistant for vibe surfing
@@ -1,68 +1,72 @@
1
1
  vibe_surf/__init__.py,sha256=WtduuMFGauMD_9dpk4fnRnLTAP6ka9Lfu0feAFNzLfo,339
2
- vibe_surf/_version.py,sha256=uf7mpKSLRNNF3RxSXHssYzKadEgmCS7IlRw4lFPAcUg,706
3
- vibe_surf/cli.py,sha256=o4ZQ-CfK8Hi__sWbMmaCpVbYFbIzL2brHyqAw2NZ5jI,17523
2
+ vibe_surf/_version.py,sha256=0-Ruc52ECccw_8Ef0d7jMkzrb8fkobUkZLqGGvcm1ik,706
3
+ vibe_surf/cli.py,sha256=zXE3E1o06sGhmQwMo6FrEzGI6RfaiVP6k62FEgIoUU4,16679
4
+ vibe_surf/common.py,sha256=_WWMxen5wFwzUjEShn3yDVC1OBFUiJ6Vccadi6tuG6w,1215
5
+ vibe_surf/logger.py,sha256=k53MFA96QX6t9OfcOf1Zws8PP0OOqjVJfhUD3Do9lKw,3043
4
6
  vibe_surf/agents/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- vibe_surf/agents/browser_use_agent.py,sha256=5NXZCQphHKlyNtLjhwG9ezBXFIo91ZnlFPRhUye7c3U,45202
6
- vibe_surf/agents/report_writer_agent.py,sha256=E5mSirewzH4Oyv385-Nn2Mf1Ug3OCVBz99PoTbvKRfQ,13860
7
- vibe_surf/agents/vibe_surf_agent.py,sha256=aXMtIdR0J3j39HWGTzmnGh2AhVRUkpcA8GqYPVaDWqU,71397
7
+ vibe_surf/agents/browser_use_agent.py,sha256=1gbljYbB8drL_vZm2jFs5d3cZHWfB6CRIT6blwiPvhs,46024
8
+ vibe_surf/agents/report_writer_agent.py,sha256=tKELps-FjZq06OKXpoyS-zJzvfdYXM6UnXDrR2oZk6M,20970
9
+ vibe_surf/agents/vibe_surf_agent.py,sha256=ev0riS1el9oV0NJLo_HldcrQ1DX-2c5e6InTXx4zR4g,73026
10
+ vibe_surf/agents/views.py,sha256=bcVOxd9On2lJ4NSar5RqP1V7Nw_RBtkHJPE-f2kVdRA,4750
8
11
  vibe_surf/agents/prompts/__init__.py,sha256=l4ieA0D8kLJthyNN85FKLNe4ExBa3stY3l-aImLDRD0,36
9
- vibe_surf/agents/prompts/vibe_surf_prompt.py,sha256=u-6KgLSnBbQohS5kiLZDcZ3aoT90ScVONXi9gNvdMoo,11006
12
+ vibe_surf/agents/prompts/report_writer_prompt.py,sha256=sZE8MUT1CDLmRzbnbEQzAvTwJjpITgh2Q8g1_eXmkzE,4454
13
+ vibe_surf/agents/prompts/vibe_surf_prompt.py,sha256=8bC7IJNbK7_jLbxjVsta3urZIi-FLCQbfSLQEjnkeLQ,5579
10
14
  vibe_surf/backend/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
15
  vibe_surf/backend/llm_config.py,sha256=9V8Gg065TQALbOKQnOqFWd8RzOJjegOD8w6YOf90Q7Y,5036
12
- vibe_surf/backend/main.py,sha256=aYbWv9vBQREtdomC9BHomajzFHhsnf3YwrXNcY7s6r8,7183
13
- vibe_surf/backend/shared_state.py,sha256=NZBT7FeMPsuvv5miHrqEWmvnY6sginS5Cb8PKJePejk,23218
16
+ vibe_surf/backend/main.py,sha256=nZDs_FkYU7NdqSm1O4OwHJslYIJZL1Gr3CEKa8ByaEY,7178
17
+ vibe_surf/backend/shared_state.py,sha256=cVZepa1A0vo4tzNJM_-8y2F4DkRTx6Qo7ZrKW6d7aVg,22860
14
18
  vibe_surf/backend/api/__init__.py,sha256=XxF1jUOORpLYCfFuPrrnUGRnOrr6ClH0_MNPU-4RnSs,68
15
- vibe_surf/backend/api/activity.py,sha256=NRSTsN3JnE63kDFhfgH3rmC9qxAeIaMKUqbXrOuZlSQ,9364
16
- vibe_surf/backend/api/browser.py,sha256=mnOFPk9j4lOhfr7fklybTsyoUaD3oQMMIrd-E7lipDA,1986
17
- vibe_surf/backend/api/config.py,sha256=9yTip3L0dBCy8jP6MqbpX_hk1Zk8KYrR-W18R0i7wjI,27091
18
- vibe_surf/backend/api/files.py,sha256=cJ2XYm9ERI-yHL1smldPEe8WJ3vfKxMvcfyXSmqEdcc,12056
19
- vibe_surf/backend/api/models.py,sha256=HVWiwGo3375LuQRPmRU93Mm6POq2ZpvQ8kKXq31zOj8,10357
20
- vibe_surf/backend/api/task.py,sha256=dTl7_0m1QnBuATDrRsMytm_5-w7TQjl2CQNM3vRBa30,11084
19
+ vibe_surf/backend/api/activity.py,sha256=_cnHusqolt5Hf3KdAf6FK-3sBc-TSaadmb5dJxGI57A,9398
20
+ vibe_surf/backend/api/browser.py,sha256=NXedyZG3NIVRIx5O7d9mHwVWX-Q4_KsX5mSgfKt8UEA,2122
21
+ vibe_surf/backend/api/config.py,sha256=EwzxYvC6HlaVo2OFWjtBmBMjX4eW2q8hp7l2LO2GZV0,27124
22
+ vibe_surf/backend/api/files.py,sha256=kJMG9MWECKXwGh64Q6xvAzNjeZGcLhIEnn65HiMZHKE,11762
23
+ vibe_surf/backend/api/models.py,sha256=iyMBdpDkOfwx0h2yRkjmYjRdFyDErhO8XZcWTurdcmU,10347
24
+ vibe_surf/backend/api/task.py,sha256=VP_Y8vLX4qeRrZegc2p6kvMBkU12e3mnzbIHk-JsYFY,12345
21
25
  vibe_surf/backend/database/__init__.py,sha256=XhmcscnhgMhUyXML7m4SnuQIqkFpyY_zJ0D3yYa2RqQ,239
22
- vibe_surf/backend/database/manager.py,sha256=Hbelc7CfcZlGm7i99_IKg8FO7ZLMc6_dBDVxru-GMPc,4466
26
+ vibe_surf/backend/database/manager.py,sha256=aC8XQc68qDsaryrux7VfCEl2hnEZL5kfnEkXWXPg2ig,4427
23
27
  vibe_surf/backend/database/models.py,sha256=mePuHsaSqJKA4TthvXbup_Ioann2_chxywiLKqAWyh4,7009
24
- vibe_surf/backend/database/queries.py,sha256=Z_JNkInf2QlG52h6miffdX0BYDxrn0fvHrYxB8ZP390,34209
25
- vibe_surf/backend/database/schemas.py,sha256=TkRyCpkDD17GRu4vj-5a8CvXRJY5UDx6dVGUZUNbbRg,3407
28
+ vibe_surf/backend/database/queries.py,sha256=2ff9w7piY6ssIPgqnEM15qCX8gsZuUgmS00fwaZSEHQ,33638
29
+ vibe_surf/backend/database/schemas.py,sha256=OPnpRKwYG1Cu8geJ6pajiEDF8x8mRestXnAfI4Gy18w,3402
26
30
  vibe_surf/backend/migrations/__init__.py,sha256=dLhZwW6AGyfBSid-QJPCpIlS4DnYDvO8NyI4s8JAZB8,383
27
31
  vibe_surf/backend/migrations/init_db.py,sha256=pY2Yq7K1vPxqT8r3jlAQcYEQWK-GGbb0F7W5asGpuew,10399
28
32
  vibe_surf/backend/migrations/seed_data.py,sha256=L6Ll-u8P4cICAUlD5y9urQPSUld6M67erSBCEIdw8Uc,8239
29
33
  vibe_surf/backend/utils/__init__.py,sha256=V8leMFp7apAglUAoCHPZrNNcRHthSLYIudIJE5qwjb0,184
30
- vibe_surf/backend/utils/encryption.py,sha256=JBl0olXQ-tESvZywuhGvy57soLhFw4ZKnbXWMWpgimg,3720
31
- vibe_surf/backend/utils/llm_factory.py,sha256=4oHaKpizqA069dcXm0iK5G1SS-fhhOY5l6cM3SCFmwE,9172
34
+ vibe_surf/backend/utils/encryption.py,sha256=CjLNh_n0Luhfa-6BB-icfzkiiDqj5b4Gu6MADU3p2eM,3754
35
+ vibe_surf/backend/utils/llm_factory.py,sha256=g1G_fkIBdDqZypTGuYGgnU5CCudpVE505n4AUdlSE5Q,8991
32
36
  vibe_surf/browser/__init__.py,sha256=_UToO2fZfSCrfjOcxhn4Qq7ZLbYeyPuUUEmqIva-Yv8,325
33
37
  vibe_surf/browser/agen_browser_profile.py,sha256=4H4qDjqLqHAfMi3niBI9fd0S1GlVDWYDUUOrEQoNkl8,5677
34
- vibe_surf/browser/agent_browser_session.py,sha256=l7m_OmeFVG3ui2_FOwv6T2imC6xQA343Xm0UJvJ_VLw,34049
35
- vibe_surf/browser/browser_manager.py,sha256=0o1S-wH9Ol1VZ6EBaCXZ_SDQBmvcHtrKyo4PM5hUV0Q,11019
36
- vibe_surf/browser/utils.py,sha256=Um_hTZgDH4gL-cCKSeUBMEqPLVForCMYp1nN7ugD5co,35704
38
+ vibe_surf/browser/agent_browser_session.py,sha256=rptz2MdXspS44zC21nJaLOmp5aEWsvBfvzpDk5Jr-mA,33884
39
+ vibe_surf/browser/browser_manager.py,sha256=PFJ9flmqR2uokuRZ3PDh_Dy6_6qcQ6kH_eRc1yT6Iq8,11257
40
+ vibe_surf/browser/utils.py,sha256=bBtpMiyz2ixWOr31GbJwZ8pVYcnxztKjTJJO92z1BDY,35742
37
41
  vibe_surf/browser/watchdogs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
42
  vibe_surf/browser/watchdogs/action_watchdog.py,sha256=6lM0nOR67clLzC6nVEMZ2Vam8VHDW8GRlg_jbGUHbPk,5297
39
- vibe_surf/browser/watchdogs/dom_watchdog.py,sha256=EtnGjKZNGL3_d4N26TEcVObctGxVGsBo9mA_7YaPzL8,13175
40
- vibe_surf/chrome_extension/background.js,sha256=21g4VJfnVlox6SpKIGnSQyR65ZmmJJ-0USPo55iD3Pc,19519
43
+ vibe_surf/browser/watchdogs/dom_watchdog.py,sha256=c0AJo2yckWFZqpgnPz7RbsRjcpwlhjD4mSIzCAbRn48,10994
44
+ vibe_surf/chrome_extension/background.js,sha256=qXbX-XhEI5reW7n7ePBcyqEJUh4HtlcAxgfWvg92-_k,19628
41
45
  vibe_surf/chrome_extension/config.js,sha256=g53UkfsaOFNC6fZG-THlBxdSjvswPsaQ9w8rxiHNq2E,1093
42
46
  vibe_surf/chrome_extension/content.js,sha256=q6JRpmHAEdPWNnFSIqoPv8eBm0T574c3H5hp-M4LYlc,8027
43
47
  vibe_surf/chrome_extension/dev-reload.js,sha256=xQpi-1Ekb5P8Ogsm6rUK09QzxafwH0H409zBKmaUFNw,1790
44
48
  vibe_surf/chrome_extension/manifest.json,sha256=B08nHuU-bPc-pUr30Y-of39TjMlrE7D5gP2sZjZ8CrE,1142
45
49
  vibe_surf/chrome_extension/popup.html,sha256=n3dI_-WbILm0q8O_za6xX0WvOofz5lwT_7YXs0u9RAE,4248
46
- vibe_surf/chrome_extension/sidepanel.html,sha256=x5nqvfdtYor9EKye5rbpF8gcgqi7D1CPfKbVH9sQLCM,25039
50
+ vibe_surf/chrome_extension/sidepanel.html,sha256=ams_TCA68787uVRnQ7J70b4rNzMEWzQsgVvSHoabouI,25942
47
51
  vibe_surf/chrome_extension/icons/convert-svg.js,sha256=j137nZA7MJK35NtrwWff8yb3UEKa5XTAvnV6EjY-CVI,953
48
52
  vibe_surf/chrome_extension/icons/logo-preview.html,sha256=hrgU45uziKHKIb8be9P4ZrZJyGggWnm2M5oEu89V5sM,6962
49
53
  vibe_surf/chrome_extension/icons/logo.icns,sha256=ZzY1eIKF4dNhNW4CeE1UBQloxNVC7bQx3qcClo3CnMQ,1569615
50
54
  vibe_surf/chrome_extension/icons/logo.png,sha256=PLmv1E6sCGXUE5ZDxr-pFPQd9Gvaw_f1TnYmF8VIssU,566385
51
- vibe_surf/chrome_extension/scripts/api-client.js,sha256=XwKmH4lP5eAkBqAM8EcQezI0gcMZK8l0RQ3ESEamcn8,13318
52
- vibe_surf/chrome_extension/scripts/file-manager.js,sha256=vmXmtW9IGL98Z2bfMDgfmYsxa-bRDzmgedg9lX_lZYo,17336
55
+ vibe_surf/chrome_extension/scripts/api-client.js,sha256=EMxNiuyw76UZ6K7-qOP2qpZDmZGvvZ8xPFy5pwIPu0w,13595
56
+ vibe_surf/chrome_extension/scripts/file-manager.js,sha256=WcEaeoECq84jXqEo3Q2ywmqppwSUVm-0dtrbTYXL07g,15809
53
57
  vibe_surf/chrome_extension/scripts/history-manager.js,sha256=J_EiBKrRp2cTxuy0Sq5oCju5YuX0_2pGG6NWrJSjC24,22218
54
58
  vibe_surf/chrome_extension/scripts/main.js,sha256=WhmCGktQoSl7aaMl8a9ysJJiysAjf12bWGypMucCSVg,16913
55
59
  vibe_surf/chrome_extension/scripts/markdown-it.min.js,sha256=gZ3xe0BdCJplNiHWTKrm6AGZydPy34jJKZqFIf-7hIw,102948
56
60
  vibe_surf/chrome_extension/scripts/modal-manager.js,sha256=VjkbTfknzwoUHFoSiLj19J18eTZ6u78I0ujuOIDAKhU,13850
57
- vibe_surf/chrome_extension/scripts/session-manager.js,sha256=JCi-6EwqWsJoxiKdqPS5skV_RjInUs3X7AHVDSjrnrA,20084
61
+ vibe_surf/chrome_extension/scripts/session-manager.js,sha256=LGSiUHSeMgJwIWluk4TuoomSi_z6m_qDc08Vbg6SOWw,20680
58
62
  vibe_surf/chrome_extension/scripts/settings-manager.js,sha256=FE5rMm3HTY1M7dzyQ2jnmCRmff1PDtqy6GNDV3tJOVk,47435
59
- vibe_surf/chrome_extension/scripts/ui-manager.js,sha256=LgjNz5-hxAkB3ul4AS73ZYfXG_Hk68d9ZOiGAtruEpY,48931
60
- vibe_surf/chrome_extension/styles/activity.css,sha256=ui0U_UmulyBkPLw0qYPndwrk8vKjxpkef0RXNYxjNPo,12145
63
+ vibe_surf/chrome_extension/scripts/ui-manager.js,sha256=K5jLaCc1KpX1R74a_PVOemEn6008amChHgbQMjsLi9s,78695
64
+ vibe_surf/chrome_extension/styles/activity.css,sha256=aEFa_abskrDQvwsesPVOyJW3rUQUEBQpMKPHhY94CoA,19601
61
65
  vibe_surf/chrome_extension/styles/animations.css,sha256=TLAet_xXBxCA-H36BWP4xBGBIVjbDdAj7Q6OPxPsbE8,7891
62
66
  vibe_surf/chrome_extension/styles/base.css,sha256=d8nt7Wej1r57G6pnBIGKEVkepFxlq8Ets0isngCf5w8,1296
63
67
  vibe_surf/chrome_extension/styles/components.css,sha256=7K6khbJcONVAArfeS4qmPBUJxvGGs20-eEw62bD_7VI,14741
64
68
  vibe_surf/chrome_extension/styles/history-modal.css,sha256=xCg0EPz1N4kg47jnz9q9E1M4zGag8lJMt_msAOkZi3M,16583
65
- vibe_surf/chrome_extension/styles/input.css,sha256=cmbhPnJFBgXQFT4rWr7jefr96g-O8YT2-DX3cBeoZ_4,9070
69
+ vibe_surf/chrome_extension/styles/input.css,sha256=ZEApufxeDOdeB5MowC3QQccrj_sKoj0-vxlgcf7rmWM,11986
66
70
  vibe_surf/chrome_extension/styles/layout.css,sha256=ggh-lWpP6sHubFkshf9dcmA52LiXw7VJmQXcM5_EGcY,3528
67
71
  vibe_surf/chrome_extension/styles/responsive.css,sha256=a_SFX-PeOcenG4xMeoru5XFnnXdf0YhEyRzvTVVZHdI,8529
68
72
  vibe_surf/chrome_extension/styles/settings-environment.css,sha256=OzgezmfZZ_yD60Jy9Uiq83mDmMCfk2dPPcZISb9Eqd4,3390
@@ -72,16 +76,18 @@ vibe_surf/chrome_extension/styles/settings-profiles.css,sha256=o0FowPPiZum_DvYIG
72
76
  vibe_surf/chrome_extension/styles/settings-responsive.css,sha256=jLE0yG15n2aI6_6QF04Rh0Y-oqqLNen81YAVt5yc2Ws,2168
73
77
  vibe_surf/chrome_extension/styles/settings-utilities.css,sha256=3PuQS2857kg83d5erLbLdo_7J95-qV-qyNWS5M-w1oQ,505
74
78
  vibe_surf/chrome_extension/styles/variables.css,sha256=VbFJ8L76AaJUqb6gCz9jEG_V6OX4YJa65I2iyeNJIw4,1411
75
- vibe_surf/controller/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
- vibe_surf/controller/file_system.py,sha256=a2fXCzAhaC41qvV_bMLi9c50FmcFYjQ0nszSdKOdDrI,2637
77
- vibe_surf/controller/mcp_client.py,sha256=OjIxx49-XyNGk5wr58m2poT56DVpfkWrVaaeBVZqLY4,2415
78
- vibe_surf/controller/vibesurf_tools.py,sha256=U3gt17bEEpP0vXWHuw4QxqUcOmyUM5zap-i-GRF6_CQ,26792
79
- vibe_surf/controller/views.py,sha256=BaPlvcHTy5h-Lfr0OSgR_t6ynitgzNQF4-VUJJt8Hi0,1072
80
79
  vibe_surf/llm/__init__.py,sha256=_vDVPo6STf343p1SgMQrF5023hicAx0g83pK2Gbk4Ek,601
81
- vibe_surf/llm/openai_compatible.py,sha256=oY32VZF4oDS6ZG0h1WGtqAlWzdlximlJVTw8e8p5Zrg,10175
82
- vibesurf-0.1.10.dist-info/licenses/LICENSE,sha256=czn6QYya0-jhLnStD9JqnMS-hwP5wRByipkrGTvoXLI,11355
83
- vibesurf-0.1.10.dist-info/METADATA,sha256=-9p2CyucCygSbYEMLbIPBfUa6P1vrG_AaLJw4qvqXcU,5182
84
- vibesurf-0.1.10.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
85
- vibesurf-0.1.10.dist-info/entry_points.txt,sha256=UxqpvMocL-PR33S6vLF2OmXn-kVzM-DneMeZeHcPMM8,48
86
- vibesurf-0.1.10.dist-info/top_level.txt,sha256=VPZGHqSb6EEqcJ4ZX6bHIuWfon5f6HXl3c7BYpbRqnY,10
87
- vibesurf-0.1.10.dist-info/RECORD,,
80
+ vibe_surf/llm/openai_compatible.py,sha256=uyXWAD1LDvFa0zyMRrX2MAnsy96iTSIiVAoYQD6D5NQ,12297
81
+ vibe_surf/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
82
+ vibe_surf/tools/browser_use_tools.py,sha256=gWiBj-YPz7kQYi0yekuvpPQ2Z2-EBLuutF6rf71iOcM,28781
83
+ vibe_surf/tools/file_system.py,sha256=SPO5V7TogkMTVBAiszJffAIfoQ2Lmhhg8ONujJ9CKuU,18007
84
+ vibe_surf/tools/mcp_client.py,sha256=OeCoTgyx4MoY7JxXndK6pGHIoyFOhf5r7XCbx25y1Ec,2446
85
+ vibe_surf/tools/report_writer_tools.py,sha256=sUqUFr-_Rs8RJ0Bs77Hrp07kNwRIvHv7ErzSPYSlbTg,705
86
+ vibe_surf/tools/vibesurf_tools.py,sha256=uSsymefr-SrVAuDtvNGsB0Am4QeTuHuL-4KJABQW8dg,29880
87
+ vibe_surf/tools/views.py,sha256=KwzzXXZJqyW1oyszA0Z4buDDqAm-6PXsCAB0nB7z_sQ,4218
88
+ vibesurf-0.1.11.dist-info/licenses/LICENSE,sha256=czn6QYya0-jhLnStD9JqnMS-hwP5wRByipkrGTvoXLI,11355
89
+ vibesurf-0.1.11.dist-info/METADATA,sha256=hLcfigUl-NbDJzLWLyNwQKnAH8biCnDsFBRv1dFSjYs,5313
90
+ vibesurf-0.1.11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
91
+ vibesurf-0.1.11.dist-info/entry_points.txt,sha256=UxqpvMocL-PR33S6vLF2OmXn-kVzM-DneMeZeHcPMM8,48
92
+ vibesurf-0.1.11.dist-info/top_level.txt,sha256=VPZGHqSb6EEqcJ4ZX6bHIuWfon5f6HXl3c7BYpbRqnY,10
93
+ vibesurf-0.1.11.dist-info/RECORD,,
@@ -1,53 +0,0 @@
1
- from browser_use.filesystem.file_system import FileSystem, FileSystemError, INVALID_FILENAME_ERROR_MESSAGE
2
-
3
-
4
- class CustomFileSystem(FileSystem):
5
- async def read_file(self, full_filename: str, external_file: bool = False) -> str:
6
- """Read file content using file-specific read method and return appropriate message to LLM"""
7
- if external_file:
8
- try:
9
- try:
10
- _, extension = self._parse_filename(full_filename)
11
- except Exception:
12
- return f'Error: Invalid filename format {full_filename}. Must be alphanumeric with a supported extension.'
13
- if extension in ['md', 'txt', 'json', 'csv']:
14
- import anyio
15
-
16
- async with await anyio.open_file(full_filename, 'r', encoding="utf-8") as f:
17
- content = await f.read()
18
- return f'Read from file {full_filename}.\n<content>\n{content}\n</content>'
19
- elif extension == 'pdf':
20
- import pypdf
21
-
22
- reader = pypdf.PdfReader(full_filename)
23
- num_pages = len(reader.pages)
24
- MAX_PDF_PAGES = 10
25
- extra_pages = num_pages - MAX_PDF_PAGES
26
- extracted_text = ''
27
- for page in reader.pages[:MAX_PDF_PAGES]:
28
- extracted_text += page.extract_text()
29
- extra_pages_text = f'{extra_pages} more pages...' if extra_pages > 0 else ''
30
- return f'Read from file {full_filename}.\n<content>\n{extracted_text}\n{extra_pages_text}</content>'
31
- else:
32
- return f'Error: Cannot read file {full_filename} as {extension} extension is not supported.'
33
- except FileNotFoundError:
34
- return f"Error: File '{full_filename}' not found."
35
- except PermissionError:
36
- return f"Error: Permission denied to read file '{full_filename}'."
37
- except Exception as e:
38
- return f"Error: Could not read file '{full_filename}'."
39
-
40
- if not self._is_valid_filename(full_filename):
41
- return INVALID_FILENAME_ERROR_MESSAGE
42
-
43
- file_obj = self.get_file(full_filename)
44
- if not file_obj:
45
- return f"File '{full_filename}' not found."
46
-
47
- try:
48
- content = file_obj.read()
49
- return f'Read from file {full_filename}.\n<content>\n{content}\n</content>'
50
- except FileSystemError as e:
51
- return str(e)
52
- except Exception:
53
- return f"Error: Could not read file '{full_filename}'."
@@ -1,37 +0,0 @@
1
- from typing import Generic, TypeVar
2
- from pydantic import BaseModel, ConfigDict, Field
3
-
4
-
5
- class HoverAction(BaseModel):
6
- """Parameters for hover action"""
7
- index: int | None = None
8
- xpath: str | None = None
9
- selector: str | None = None
10
-
11
-
12
- class ExtractionAction(BaseModel):
13
- query: str = Field(
14
- default="summary this page",
15
- description='Extraction goal',
16
- )
17
- extract_links: bool | None = Field(
18
- default=False,
19
- description='Whether to extract links',
20
- )
21
- tab_id: str | None = Field(
22
- default=None,
23
- min_length=4,
24
- max_length=4,
25
- description='exact 4 character Tab ID of the tab for extraction',
26
- ) # last 4 chars of TargetID
27
-
28
-
29
- class FileExtractionAction(BaseModel):
30
- """Parameters for file content extraction action"""
31
- file_path: str = Field(
32
- description='Path to the file to extract content from',
33
- )
34
- query: str = Field(
35
- default="Extract and summarize the content from this file",
36
- description='Query or instruction for content extraction',
37
- )
File without changes