vibesurf 0.1.9a6__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 (69) 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 +878 -814
  7. vibe_surf/agents/views.py +130 -0
  8. vibe_surf/backend/api/activity.py +3 -1
  9. vibe_surf/backend/api/browser.py +70 -0
  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 +47 -13
  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 +80 -3
  18. vibe_surf/backend/shared_state.py +30 -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 +308 -62
  22. vibe_surf/browser/browser_manager.py +71 -100
  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 +88 -0
  26. vibe_surf/chrome_extension/manifest.json +3 -1
  27. vibe_surf/chrome_extension/scripts/api-client.js +13 -0
  28. vibe_surf/chrome_extension/scripts/file-manager.js +482 -0
  29. vibe_surf/chrome_extension/scripts/history-manager.js +658 -0
  30. vibe_surf/chrome_extension/scripts/modal-manager.js +487 -0
  31. vibe_surf/chrome_extension/scripts/session-manager.js +52 -11
  32. vibe_surf/chrome_extension/scripts/settings-manager.js +1214 -0
  33. vibe_surf/chrome_extension/scripts/ui-manager.js +1530 -3163
  34. vibe_surf/chrome_extension/sidepanel.html +47 -7
  35. vibe_surf/chrome_extension/styles/activity.css +934 -0
  36. vibe_surf/chrome_extension/styles/base.css +76 -0
  37. vibe_surf/chrome_extension/styles/history-modal.css +791 -0
  38. vibe_surf/chrome_extension/styles/input.css +568 -0
  39. vibe_surf/chrome_extension/styles/layout.css +186 -0
  40. vibe_surf/chrome_extension/styles/responsive.css +454 -0
  41. vibe_surf/chrome_extension/styles/settings-environment.css +165 -0
  42. vibe_surf/chrome_extension/styles/settings-forms.css +389 -0
  43. vibe_surf/chrome_extension/styles/settings-modal.css +141 -0
  44. vibe_surf/chrome_extension/styles/settings-profiles.css +244 -0
  45. vibe_surf/chrome_extension/styles/settings-responsive.css +144 -0
  46. vibe_surf/chrome_extension/styles/settings-utilities.css +25 -0
  47. vibe_surf/chrome_extension/styles/variables.css +54 -0
  48. vibe_surf/cli.py +5 -22
  49. vibe_surf/common.py +35 -0
  50. vibe_surf/llm/openai_compatible.py +148 -93
  51. vibe_surf/logger.py +99 -0
  52. vibe_surf/{controller/vibesurf_tools.py → tools/browser_use_tools.py} +233 -221
  53. vibe_surf/tools/file_system.py +415 -0
  54. vibe_surf/{controller → tools}/mcp_client.py +4 -3
  55. vibe_surf/tools/report_writer_tools.py +21 -0
  56. vibe_surf/tools/vibesurf_tools.py +657 -0
  57. vibe_surf/tools/views.py +120 -0
  58. {vibesurf-0.1.9a6.dist-info → vibesurf-0.1.11.dist-info}/METADATA +23 -3
  59. vibesurf-0.1.11.dist-info/RECORD +93 -0
  60. vibe_surf/chrome_extension/styles/main.css +0 -2338
  61. vibe_surf/chrome_extension/styles/settings.css +0 -1100
  62. vibe_surf/controller/file_system.py +0 -53
  63. vibe_surf/controller/views.py +0 -37
  64. vibesurf-0.1.9a6.dist-info/RECORD +0 -71
  65. /vibe_surf/{controller → tools}/__init__.py +0 -0
  66. {vibesurf-0.1.9a6.dist-info → vibesurf-0.1.11.dist-info}/WHEEL +0 -0
  67. {vibesurf-0.1.9a6.dist-info → vibesurf-0.1.11.dist-info}/entry_points.txt +0 -0
  68. {vibesurf-0.1.9a6.dist-info → vibesurf-0.1.11.dist-info}/licenses/LICENSE +0 -0
  69. {vibesurf-0.1.9a6.dist-info → vibesurf-0.1.11.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,186 @@
1
+ /* Layout Styles - VibeSurf Extension */
2
+
3
+ /* Container */
4
+ .vibesurf-container {
5
+ display: flex;
6
+ flex-direction: column;
7
+ height: 100vh;
8
+ width: 100%;
9
+ min-width: 320px;
10
+ background-color: var(--bg-primary);
11
+ resize: horizontal;
12
+ overflow: auto;
13
+ }
14
+
15
+ /* Header */
16
+ .header {
17
+ display: flex;
18
+ align-items: center;
19
+ justify-content: space-between;
20
+ padding: var(--spacing-lg);
21
+ background-color: var(--bg-primary);
22
+ border-bottom: 1px solid var(--border-color);
23
+ min-height: 56px;
24
+ }
25
+
26
+ .header-left {
27
+ display: flex;
28
+ align-items: center;
29
+ }
30
+
31
+ .logo {
32
+ display: flex;
33
+ align-items: center;
34
+ color: var(--primary-color);
35
+ font-weight: var(--font-weight-semibold);
36
+ }
37
+
38
+ .logo-brand {
39
+ display: flex;
40
+ align-items: center;
41
+ gap: var(--spacing-sm);
42
+ color: var(--primary-color);
43
+ font-weight: var(--font-weight-semibold);
44
+ }
45
+
46
+ .logo-image {
47
+ width: 24px;
48
+ height: 24px;
49
+ border-radius: var(--radius-sm);
50
+ object-fit: contain;
51
+ flex-shrink: 0;
52
+ }
53
+
54
+ .logo-content {
55
+ display: flex;
56
+ flex-direction: column;
57
+ gap: var(--spacing-xs);
58
+ }
59
+
60
+ .logo-text {
61
+ font-size: var(--font-size-lg);
62
+ line-height: 1.2;
63
+ }
64
+
65
+ .session-info {
66
+ display: flex;
67
+ align-items: center;
68
+ gap: var(--spacing-xs);
69
+ font-size: var(--font-size-xs);
70
+ color: var(--text-secondary);
71
+ }
72
+
73
+ .session-label {
74
+ font-weight: var(--font-weight-medium);
75
+ }
76
+
77
+ #session-id {
78
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
79
+ background-color: var(--bg-tertiary);
80
+ padding: 2px 4px;
81
+ border-radius: var(--radius-sm);
82
+ max-width: 120px;
83
+ overflow: hidden;
84
+ text-overflow: ellipsis;
85
+ white-space: nowrap;
86
+ }
87
+
88
+ .copy-btn {
89
+ display: flex;
90
+ align-items: center;
91
+ justify-content: center;
92
+ width: 20px;
93
+ height: 20px;
94
+ border: none;
95
+ border-radius: var(--radius-sm);
96
+ background-color: transparent;
97
+ color: var(--text-muted);
98
+ cursor: pointer;
99
+ transition: all var(--transition-fast);
100
+ }
101
+
102
+ .copy-btn:hover {
103
+ background-color: var(--bg-hover);
104
+ color: var(--text-secondary);
105
+ }
106
+
107
+ .copy-btn:active {
108
+ background-color: var(--bg-active);
109
+ transform: scale(0.95);
110
+ }
111
+
112
+ .header-right {
113
+ display: flex;
114
+ align-items: center;
115
+ gap: var(--spacing-xs);
116
+ }
117
+
118
+ .icon-btn {
119
+ display: flex;
120
+ align-items: center;
121
+ justify-content: center;
122
+ width: 32px;
123
+ height: 32px;
124
+ border: none;
125
+ border-radius: var(--radius-md);
126
+ background-color: transparent;
127
+ color: var(--text-secondary);
128
+ cursor: pointer;
129
+ transition: all var(--transition-fast);
130
+ }
131
+
132
+ .icon-btn:hover {
133
+ background-color: var(--bg-hover);
134
+ color: var(--text-primary);
135
+ }
136
+
137
+ .icon-btn:active {
138
+ background-color: var(--bg-active);
139
+ transform: scale(0.95);
140
+ }
141
+
142
+ /* Main Content */
143
+ .main-content {
144
+ flex: 1;
145
+ display: flex;
146
+ flex-direction: column;
147
+ overflow: hidden;
148
+ background-color: var(--bg-primary);
149
+ }
150
+
151
+ /* Common Button Styles */
152
+ .action-btn {
153
+ display: flex;
154
+ align-items: center;
155
+ justify-content: center;
156
+ width: 32px;
157
+ height: 32px;
158
+ border: 1px solid var(--border-color);
159
+ border-radius: var(--radius-md);
160
+ background-color: var(--bg-secondary);
161
+ color: var(--text-secondary);
162
+ cursor: pointer;
163
+ transition: all var(--transition-fast);
164
+ opacity: 0.8;
165
+ }
166
+
167
+ .action-btn:hover {
168
+ border-color: var(--border-hover);
169
+ background-color: var(--bg-hover);
170
+ color: var(--text-primary);
171
+ opacity: 1;
172
+ transform: scale(1.05);
173
+ }
174
+
175
+ .action-btn:active {
176
+ transform: scale(0.95);
177
+ }
178
+
179
+ .action-btn:disabled {
180
+ background-color: var(--border-color);
181
+ border-color: var(--border-color);
182
+ color: var(--text-muted);
183
+ cursor: not-allowed;
184
+ transform: none;
185
+ opacity: 0.5;
186
+ }
@@ -0,0 +1,454 @@
1
+ /* Responsive Styles - VibeSurf Extension */
2
+
3
+ /* Small Screen Adjustments */
4
+ @media (max-width: 320px) {
5
+ .header {
6
+ padding: var(--spacing-md);
7
+ }
8
+
9
+ .activity-log {
10
+ padding: var(--spacing-md);
11
+ }
12
+
13
+ .input-section {
14
+ padding: var(--spacing-md);
15
+ }
16
+ }
17
+
18
+ /* Tablet and Medium Screen Adjustments */
19
+ @media (max-width: 768px) {
20
+ .history-modal-content {
21
+ width: 96vw !important;
22
+ max-height: 92vh !important;
23
+ border-radius: 12px !important;
24
+ margin: 16px !important;
25
+ }
26
+
27
+ .history-content {
28
+ padding: 24px !important;
29
+ padding-top: 20px !important;
30
+ }
31
+
32
+ .section-header {
33
+ padding-bottom: 20px !important;
34
+ margin-bottom: 24px !important;
35
+ }
36
+
37
+ .section-header h4 {
38
+ font-size: 20px !important;
39
+ }
40
+
41
+ .search-filter-bar {
42
+ flex-direction: column !important;
43
+ gap: 16px !important;
44
+ }
45
+
46
+ .search-input, .filter-select {
47
+ padding: 12px 16px !important;
48
+ font-size: 14px !important;
49
+ }
50
+
51
+ .recent-task-item {
52
+ padding: 20px !important;
53
+ gap: 16px !important;
54
+ margin-bottom: 16px !important;
55
+ }
56
+
57
+ .task-status-icon {
58
+ width: 40px !important;
59
+ height: 40px !important;
60
+ font-size: 18px !important;
61
+ }
62
+
63
+ .task-header {
64
+ flex-direction: column !important;
65
+ align-items: flex-start !important;
66
+ gap: 8px !important;
67
+ }
68
+
69
+ .session-item {
70
+ padding: 16px !important;
71
+ gap: 16px !important;
72
+ margin-bottom: 12px !important;
73
+ }
74
+
75
+ .session-header {
76
+ flex-direction: column !important;
77
+ align-items: flex-start !important;
78
+ gap: 6px !important;
79
+ }
80
+
81
+ .pagination-controls {
82
+ flex-direction: column !important;
83
+ gap: 16px !important;
84
+ text-align: center !important;
85
+ padding: 20px 0 !important;
86
+ }
87
+
88
+ .page-btn {
89
+ padding: 10px 16px !important;
90
+ font-size: 13px !important;
91
+ }
92
+
93
+ .view-more-btn {
94
+ padding: 16px !important;
95
+ font-size: 14px !important;
96
+ }
97
+ }
98
+
99
+ /* Mobile Screen Adjustments */
100
+ @media (max-width: 480px) {
101
+ .history-modal-content {
102
+ width: 98vw !important;
103
+ max-height: 95vh !important;
104
+ border-radius: 8px !important;
105
+ margin: 8px !important;
106
+ }
107
+
108
+ .history-content {
109
+ padding: 20px !important;
110
+ padding-top: 16px !important;
111
+ }
112
+
113
+ .section-header h4 {
114
+ font-size: 18px !important;
115
+ }
116
+
117
+ .back-btn {
118
+ padding: 8px 16px !important;
119
+ font-size: 13px !important;
120
+ }
121
+
122
+ .recent-task-item {
123
+ padding: 16px !important;
124
+ gap: 12px !important;
125
+ border-radius: 12px !important;
126
+ }
127
+
128
+ .task-status-icon {
129
+ width: 36px !important;
130
+ height: 36px !important;
131
+ font-size: 16px !important;
132
+ border-radius: 10px !important;
133
+ }
134
+
135
+ .session-id-badge {
136
+ font-size: 10px !important;
137
+ padding: 4px 8px !important;
138
+ }
139
+
140
+ .task-timestamp, .session-time {
141
+ font-size: 11px !important;
142
+ }
143
+
144
+ .task-description {
145
+ font-size: 14px !important;
146
+ -webkit-line-clamp: 3 !important;
147
+ margin-bottom: 12px !important;
148
+ }
149
+
150
+ .task-meta, .session-details {
151
+ font-size: 12px !important;
152
+ gap: 8px !important;
153
+ }
154
+
155
+ .task-status-text {
156
+ padding: 3px 8px !important;
157
+ font-size: 11px !important;
158
+ }
159
+
160
+ .session-item {
161
+ padding: 14px !important;
162
+ gap: 12px !important;
163
+ border-radius: 10px !important;
164
+ }
165
+
166
+ .session-id {
167
+ font-size: 13px !important;
168
+ }
169
+
170
+ .empty-state {
171
+ padding: 40px 20px !important;
172
+ min-height: 240px !important;
173
+ }
174
+
175
+ .empty-state-icon {
176
+ font-size: 56px !important;
177
+ margin-bottom: 20px !important;
178
+ }
179
+
180
+ .empty-state-title {
181
+ font-size: 18px !important;
182
+ margin-bottom: 12px !important;
183
+ }
184
+
185
+ .empty-state-description {
186
+ font-size: 14px !important;
187
+ max-width: 280px !important;
188
+ }
189
+
190
+ .task-item-content {
191
+ min-width: 0;
192
+ }
193
+
194
+ .task-description {
195
+ -webkit-line-clamp: 3;
196
+ }
197
+ }
198
+
199
+ /* Extra Small Mobile Screens */
200
+ @media (max-width: 360px) {
201
+ .history-content {
202
+ padding: 16px !important;
203
+ }
204
+
205
+ .recent-task-item {
206
+ flex-direction: column !important;
207
+ align-items: flex-start !important;
208
+ text-align: left !important;
209
+ }
210
+
211
+ .task-status-icon {
212
+ align-self: flex-end !important;
213
+ margin-bottom: 8px !important;
214
+ }
215
+
216
+ .task-header {
217
+ width: 100% !important;
218
+ }
219
+
220
+ .session-item {
221
+ flex-direction: column !important;
222
+ align-items: flex-start !important;
223
+ }
224
+
225
+ .session-header {
226
+ width: 100% !important;
227
+ }
228
+ }
229
+
230
+ /* Accessibility Enhancements */
231
+ @media (prefers-reduced-motion: reduce) {
232
+ .recent-task-item,
233
+ .session-item,
234
+ .view-more-btn,
235
+ .back-btn,
236
+ .page-btn,
237
+ .task-suggestion,
238
+ .icon-btn,
239
+ .action-btn,
240
+ .control-btn {
241
+ transition: none !important;
242
+ }
243
+
244
+ .recent-task-item:hover,
245
+ .session-item:hover,
246
+ .task-suggestion:hover {
247
+ transform: none !important;
248
+ }
249
+
250
+ .loading-skeleton {
251
+ animation: none !important;
252
+ background: var(--bg-tertiary) !important;
253
+ }
254
+
255
+ .history-modal .status-dot.running,
256
+ .history-modal .status-dot.active,
257
+ .status-dot.active {
258
+ animation: none !important;
259
+ }
260
+
261
+ .history-modal .status-dot.running::before,
262
+ .history-modal .status-dot.active::before {
263
+ animation: none !important;
264
+ opacity: 0 !important;
265
+ }
266
+
267
+ @keyframes pulse {
268
+ 0%, 100% {
269
+ opacity: 1;
270
+ }
271
+ 50% {
272
+ opacity: 1;
273
+ }
274
+ }
275
+ }
276
+
277
+ /* High Contrast Mode Support */
278
+ @media (prefers-contrast: high) {
279
+ :root {
280
+ --border-color: #000000;
281
+ --text-muted: #333333;
282
+ --bg-secondary: #f0f0f0;
283
+ --bg-tertiary: #e0e0e0;
284
+ }
285
+
286
+ .recent-task-item,
287
+ .session-item,
288
+ .message-bubble,
289
+ .control-btn,
290
+ .action-btn {
291
+ border-width: 2px !important;
292
+ }
293
+
294
+ .task-status-icon,
295
+ .task-status-text {
296
+ border-width: 2px !important;
297
+ }
298
+
299
+ .history-modal .status-dot,
300
+ .status-dot {
301
+ border: 2px solid currentColor !important;
302
+ }
303
+
304
+ .message-bubble {
305
+ box-shadow: none !important;
306
+ }
307
+ }
308
+
309
+ /* Print Styles */
310
+ @media print {
311
+ .header-right,
312
+ .control-panel,
313
+ .input-section,
314
+ .action-btn,
315
+ .icon-btn {
316
+ display: none !important;
317
+ }
318
+
319
+ .vibesurf-container {
320
+ height: auto !important;
321
+ overflow: visible !important;
322
+ }
323
+
324
+ .activity-log {
325
+ overflow: visible !important;
326
+ padding: 0 !important;
327
+ }
328
+
329
+ .message-bubble {
330
+ border: 1px solid #000 !important;
331
+ box-shadow: none !important;
332
+ break-inside: avoid;
333
+ }
334
+
335
+ .activity-item {
336
+ break-inside: avoid;
337
+ page-break-inside: avoid;
338
+ }
339
+ }
340
+
341
+ /* Large Screen Optimizations */
342
+ @media (min-width: 1200px) {
343
+ .vibesurf-container {
344
+ max-width: 1200px;
345
+ margin: 0 auto;
346
+ }
347
+
348
+ .message-container {
349
+ max-width: 85%;
350
+ }
351
+
352
+ .history-modal-content {
353
+ max-width: 1000px;
354
+ }
355
+
356
+ .quick-tasks {
357
+ grid-template-columns: repeat(2, 1fr);
358
+ max-width: 600px;
359
+ }
360
+ }
361
+
362
+ /* Ultra-wide Screen Adjustments */
363
+ @media (min-width: 1600px) {
364
+ .message-container {
365
+ max-width: 70%;
366
+ }
367
+
368
+ .quick-tasks {
369
+ grid-template-columns: repeat(3, 1fr);
370
+ max-width: 800px;
371
+ }
372
+ }
373
+
374
+ /* Touch Device Optimizations */
375
+ @media (hover: none) and (pointer: coarse) {
376
+ .icon-btn,
377
+ .action-btn,
378
+ .control-btn {
379
+ min-height: 44px;
380
+ min-width: 44px;
381
+ }
382
+
383
+ .task-suggestion {
384
+ padding: var(--spacing-xl);
385
+ }
386
+
387
+ .copy-btn {
388
+ min-height: 32px;
389
+ min-width: 32px;
390
+ }
391
+
392
+ .recent-task-item,
393
+ .session-item {
394
+ padding: var(--spacing-xl);
395
+ }
396
+ }
397
+
398
+ /* Landscape Mobile Adjustments */
399
+ @media (max-height: 500px) and (orientation: landscape) {
400
+ .header {
401
+ padding: var(--spacing-sm) var(--spacing-lg);
402
+ min-height: 48px;
403
+ }
404
+
405
+ .input-section {
406
+ padding: var(--spacing-sm) var(--spacing-md);
407
+ }
408
+
409
+ .welcome-message {
410
+ padding: var(--spacing-md) var(--spacing-lg);
411
+ }
412
+
413
+ .quick-tasks {
414
+ grid-template-columns: repeat(2, 1fr);
415
+ gap: var(--spacing-sm);
416
+ }
417
+
418
+ .task-suggestion {
419
+ padding: var(--spacing-md);
420
+ }
421
+ }
422
+
423
+ /* Reduced Data Mode */
424
+ @media (prefers-reduced-data: reduce) {
425
+ .loading-skeleton {
426
+ background: var(--bg-tertiary) !important;
427
+ animation: none !important;
428
+ }
429
+
430
+ .task-status-icon::before,
431
+ .recent-task-item::before,
432
+ .session-item::before {
433
+ display: none !important;
434
+ }
435
+
436
+ .view-more-btn::before {
437
+ display: none !important;
438
+ }
439
+ }
440
+
441
+ /* Focus Visible Support */
442
+ @media (prefers-reduced-motion: no-preference) {
443
+ .recent-task-item:focus-visible,
444
+ .session-item:focus-visible,
445
+ .view-more-btn:focus-visible,
446
+ .back-btn:focus-visible,
447
+ .task-suggestion:focus-visible,
448
+ .icon-btn:focus-visible,
449
+ .action-btn:focus-visible,
450
+ .control-btn:focus-visible {
451
+ outline: 3px solid var(--primary-color);
452
+ outline-offset: 2px;
453
+ }
454
+ }