vibesurf 0.1.9a0__tar.gz → 0.1.9a1__tar.gz

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 (92) hide show
  1. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/.github/workflows/publish.yml +92 -4
  2. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/.gitignore +2 -1
  3. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/PKG-INFO +2 -2
  4. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/build-local.sh +64 -31
  5. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/_version.py +3 -3
  6. vibesurf-0.1.9a1/vibe_surf/chrome_extension/icons/logo.icns +0 -0
  7. vibesurf-0.1.9a1/vibe_surf/chrome_extension/icons/logo.png +0 -0
  8. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibesurf.egg-info/PKG-INFO +2 -2
  9. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibesurf.egg-info/SOURCES.txt +2 -0
  10. vibesurf-0.1.9a1/vibesurf.spec +242 -0
  11. vibesurf-0.1.9a0/vibe_surf/chrome_extension/icons/logo.png +0 -0
  12. vibesurf-0.1.9a0/vibesurf.spec +0 -145
  13. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/.env.example +0 -0
  14. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/.python-version +0 -0
  15. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/LICENSE +0 -0
  16. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/MANIFEST.in +0 -0
  17. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/README.md +0 -0
  18. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/build-local.bat +0 -0
  19. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/docs/EXECUTABLE_BUILD.md +0 -0
  20. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/docs/PYPI_SETUP.md +0 -0
  21. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/pyproject.toml +1 -1
  22. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/setup.cfg +0 -0
  23. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/tests/test_agents.py +0 -0
  24. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/tests/test_backend_api.py +0 -0
  25. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/tests/test_browser.py +0 -0
  26. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/tests/test_controller.py +0 -0
  27. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/__init__.py +0 -0
  28. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/agents/__init__.py +0 -0
  29. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/agents/browser_use_agent.py +0 -0
  30. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/agents/prompts/__init__.py +0 -0
  31. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/agents/prompts/vibe_surf_prompt.py +0 -0
  32. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/agents/report_writer_agent.py +0 -0
  33. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/agents/vibe_surf_agent.py +0 -0
  34. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/backend/__init__.py +0 -0
  35. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/backend/api/__init__.py +0 -0
  36. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/backend/api/activity.py +0 -0
  37. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/backend/api/config.py +0 -0
  38. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/backend/api/files.py +0 -0
  39. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/backend/api/models.py +0 -0
  40. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/backend/api/task.py +0 -0
  41. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/backend/database/__init__.py +0 -0
  42. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/backend/database/manager.py +0 -0
  43. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/backend/database/models.py +0 -0
  44. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/backend/database/queries.py +0 -0
  45. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/backend/database/schemas.py +0 -0
  46. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/backend/llm_config.py +0 -0
  47. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/backend/main.py +0 -0
  48. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/backend/migrations/__init__.py +0 -0
  49. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/backend/migrations/init_db.py +0 -0
  50. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/backend/migrations/seed_data.py +0 -0
  51. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/backend/shared_state.py +0 -0
  52. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/backend/utils/__init__.py +0 -0
  53. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/backend/utils/encryption.py +0 -0
  54. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/backend/utils/llm_factory.py +0 -0
  55. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/browser/__init__.py +0 -0
  56. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/browser/agen_browser_profile.py +0 -0
  57. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/browser/agent_browser_session.py +0 -0
  58. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/browser/browser_manager.py +0 -0
  59. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/browser/utils.py +0 -0
  60. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/browser/watchdogs/__init__.py +0 -0
  61. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/browser/watchdogs/action_watchdog.py +0 -0
  62. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/browser/watchdogs/dom_watchdog.py +0 -0
  63. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/chrome_extension/background.js +0 -0
  64. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/chrome_extension/config.js +0 -0
  65. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/chrome_extension/content.js +0 -0
  66. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/chrome_extension/dev-reload.js +0 -0
  67. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/chrome_extension/icons/convert-svg.js +0 -0
  68. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/chrome_extension/icons/logo-preview.html +0 -0
  69. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/chrome_extension/manifest.json +0 -0
  70. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/chrome_extension/popup.html +0 -0
  71. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/chrome_extension/scripts/api-client.js +0 -0
  72. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/chrome_extension/scripts/main.js +0 -0
  73. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/chrome_extension/scripts/markdown-it.min.js +0 -0
  74. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/chrome_extension/scripts/session-manager.js +0 -0
  75. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/chrome_extension/scripts/ui-manager.js +0 -0
  76. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/chrome_extension/sidepanel.html +0 -0
  77. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/chrome_extension/styles/animations.css +0 -0
  78. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/chrome_extension/styles/components.css +0 -0
  79. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/chrome_extension/styles/main.css +0 -0
  80. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/chrome_extension/styles/settings.css +0 -0
  81. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/cli.py +0 -0
  82. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/controller/__init__.py +0 -0
  83. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/controller/file_system.py +0 -0
  84. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/controller/mcp_client.py +0 -0
  85. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/controller/vibesurf_tools.py +0 -0
  86. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/controller/views.py +0 -0
  87. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/llm/__init__.py +0 -0
  88. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibe_surf/llm/openai_compatible.py +0 -0
  89. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibesurf.egg-info/dependency_links.txt +0 -0
  90. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibesurf.egg-info/entry_points.txt +0 -0
  91. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibesurf.egg-info/requires.txt +1 -1
  92. {vibesurf-0.1.9a0 → vibesurf-0.1.9a1}/vibesurf.egg-info/top_level.txt +0 -0
@@ -165,11 +165,55 @@ jobs:
165
165
  shell: bash
166
166
  run: |
167
167
  if [[ "$RUNNER_OS" == "Windows" ]]; then
168
+ # Windows: rename .exe file
168
169
  mv dist/vibesurf.exe dist/${{ matrix.asset_name }}
170
+ elif [[ "$RUNNER_OS" == "macOS" ]]; then
171
+ # macOS: handle .app bundle
172
+ if [ -d "dist/VibeSurf.app" ]; then
173
+ echo "Found macOS .app bundle"
174
+
175
+ # Apply ad-hoc code signing FIRST, before creating archive
176
+ echo "Adding ad-hoc code signature to .app bundle..."
177
+ codesign --force --deep --sign - dist/VibeSurf.app || echo "Code signing failed, continuing..."
178
+
179
+ # Remove quarantine attribute to help with Gatekeeper
180
+ xattr -cr dist/VibeSurf.app 2>/dev/null || echo "No quarantine attributes to remove"
181
+
182
+ # Verify signing
183
+ echo "Verifying code signature..."
184
+ codesign --verify --deep dist/VibeSurf.app && echo "✅ Signature verified" || echo "⚠️ Signature verification failed"
185
+
186
+ # Now create tar.gz archive of the SIGNED .app bundle
187
+ echo "Creating archive with signed .app bundle..."
188
+ cd dist
189
+ tar -czf ${{ matrix.asset_name }}.tar.gz VibeSurf.app
190
+
191
+ # Verify archive was created
192
+ if [ -f "${{ matrix.asset_name }}.tar.gz" ]; then
193
+ echo "✅ Archive created successfully: ${{ matrix.asset_name }}.tar.gz"
194
+ ls -lh ${{ matrix.asset_name }}.tar.gz
195
+ mv ${{ matrix.asset_name }}.tar.gz ${{ matrix.asset_name }}
196
+ else
197
+ echo "❌ Failed to create archive"
198
+ exit 1
199
+ fi
200
+ cd ..
201
+ else
202
+ # Fallback: single executable
203
+ echo "No .app bundle found, using single executable"
204
+ mv dist/vibesurf dist/${{ matrix.asset_name }}
205
+ chmod +x dist/${{ matrix.asset_name }}
206
+ codesign --force --deep --sign - dist/${{ matrix.asset_name }} || echo "Code signing failed, continuing..."
207
+ fi
169
208
  else
209
+ # Linux: single executable
170
210
  mv dist/vibesurf dist/${{ matrix.asset_name }}
171
211
  chmod +x dist/${{ matrix.asset_name }}
172
212
  fi
213
+
214
+ # Show final result
215
+ echo "=== Final executable/archive ==="
216
+ ls -lh dist/${{ matrix.asset_name }}
173
217
 
174
218
  - name: Test executable
175
219
  shell: bash
@@ -177,10 +221,20 @@ jobs:
177
221
  # Basic test to ensure executable runs
178
222
  if [[ "$RUNNER_OS" == "Windows" ]]; then
179
223
  echo "Testing Windows executable..."
180
- # Simple existence check for Windows
181
224
  ls -la dist/${{ matrix.asset_name }}
225
+ elif [[ "$RUNNER_OS" == "macOS" ]]; then
226
+ echo "Testing macOS .app bundle..."
227
+ if [ -d "dist/VibeSurf.app" ]; then
228
+ echo "✅ VibeSurf.app bundle exists"
229
+ ls -la dist/VibeSurf.app/Contents/MacOS/
230
+ # Test the executable inside the bundle
231
+ ./dist/VibeSurf.app/Contents/MacOS/vibesurf --help || echo "Basic app test completed"
232
+ else
233
+ echo "Testing macOS executable..."
234
+ ./dist/${{ matrix.asset_name }} --help || echo "Basic test completed"
235
+ fi
182
236
  else
183
- echo "Testing Unix executable..."
237
+ echo "Testing Linux executable..."
184
238
  ./dist/${{ matrix.asset_name }} --help || echo "Basic test completed"
185
239
  fi
186
240
 
@@ -189,6 +243,7 @@ jobs:
189
243
  with:
190
244
  name: ${{ matrix.asset_name }}
191
245
  path: dist/${{ matrix.asset_name }}
246
+ retention-days: 90
192
247
 
193
248
  publish-pypi:
194
249
  needs: [test, build-wheels]
@@ -208,13 +263,17 @@ jobs:
208
263
  uses: pypa/gh-action-pypi-publish@release/v1
209
264
  with:
210
265
  password: ${{ secrets.PYPI_API_TOKEN }}
266
+ skip-existing: true # Skip if version already exists on PyPI
211
267
  # Use the following line if you want to use trusted publishing instead
212
- # skip-existing: true
268
+ # trusted-publishing: true
213
269
 
214
270
  publish-executables:
215
271
  needs: [test, build-executables]
216
272
  runs-on: ubuntu-latest
217
273
  if: github.event_name == 'release'
274
+ permissions:
275
+ contents: write # Required for uploading to GitHub releases
276
+ actions: read # Required for downloading artifacts
218
277
 
219
278
  steps:
220
279
  - name: Download all artifacts
@@ -227,4 +286,33 @@ jobs:
227
286
  vibesurf-windows-x64.exe/vibesurf-windows-x64.exe
228
287
  vibesurf-macos-intel-x64/vibesurf-macos-intel-x64
229
288
  vibesurf-macos-apple-silicon/vibesurf-macos-apple-silicon
230
- vibesurf-linux-x64/vibesurf-linux-x64
289
+ vibesurf-linux-x64/vibesurf-linux-x64
290
+ body: |
291
+ ## 📦 Download Instructions
292
+
293
+ ### 🪟 Windows
294
+ - Download `vibesurf-windows-x64.exe`
295
+ - Run directly or add to PATH
296
+
297
+ ### 🍎 macOS (with proper .app bundle)
298
+ - **Intel Macs**: Download `vibesurf-macos-intel-x64`
299
+ - **Apple Silicon**: Download `vibesurf-macos-apple-silicon`
300
+ - Extract: `tar -xzf vibesurf-macos-*.tar.gz`
301
+ - Open: Double-click `VibeSurf.app` in Finder
302
+ - **If blocked**: Right-click → "Open" → "Open" in dialog
303
+ - **Alternative**: System Preferences → Security & Privacy → "Open Anyway"
304
+
305
+ ✅ **Features**:
306
+ - Proper ICNS icon
307
+ - No terminal window (windowed mode)
308
+ - Ad-hoc signed (reduces warnings)
309
+ - Standard macOS .app bundle
310
+
311
+ ### 🐧 Linux
312
+ - Download `vibesurf-linux-x64`
313
+ - Make executable: `chmod +x vibesurf-linux-x64`
314
+ - Run: `./vibesurf-linux-x64`
315
+
316
+ ---
317
+
318
+ **Note**: All builds include automatic platform detection and appropriate configurations.
@@ -20,4 +20,5 @@ swarmsurf_workspace
20
20
  workspace
21
21
  *.db
22
22
  vibe_surf/_version.py
23
- .build-env
23
+ .build-env
24
+ .DS_Store
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vibesurf
3
- Version: 0.1.9a0
3
+ Version: 0.1.9a1
4
4
  Summary: VibeSurf: A powerful browser assistant for vibe surfing
5
5
  Author: Shao Warm
6
6
  License: Apache-2.0
@@ -26,7 +26,6 @@ Requires-Dist: json-repair>=0.48.0
26
26
  Requires-Dist: aiohttp>=3.12.15
27
27
  Requires-Dist: scikit-image>=0.25.2
28
28
  Requires-Dist: python-socks>=2.7.2
29
- Requires-Dist: browser-use==0.7.1
30
29
  Requires-Dist: langgraph>=0.6.4
31
30
  Requires-Dist: fastapi>=0.104.0
32
31
  Requires-Dist: uvicorn[standard]>=0.24.0
@@ -38,6 +37,7 @@ Requires-Dist: aiosqlite>=0.21.0
38
37
  Requires-Dist: rich>=13.0.0
39
38
  Requires-Dist: greenlet>=3.2.4
40
39
  Requires-Dist: getmac>=0.9.5
40
+ Requires-Dist: browser-use==0.7.1
41
41
  Dynamic: license-file
42
42
 
43
43
  # VibeSurf: A powerful browser assistant for vibe surfing
@@ -87,38 +87,71 @@ fi
87
87
 
88
88
  pyinstaller vibesurf.spec --clean --noconfirm
89
89
 
90
- # Step 4: Test executable
91
- if [ -f "dist/vibesurf" ]; then
92
- print_success "Executable built successfully!"
93
-
94
- # Make executable and test
95
- chmod +x dist/vibesurf
96
-
97
- print_status "Testing executable..."
98
- ./dist/vibesurf --help > /dev/null 2>&1 && {
99
- print_success "Executable test passed!"
100
- } || {
101
- print_warning "Executable test failed, but this might be expected for CLI apps"
102
- }
103
-
104
- # Show file info
105
- echo ""
106
- echo "📊 Executable Information:"
107
- echo "========================="
108
- ls -lh dist/vibesurf
109
-
110
- if command -v file &> /dev/null; then
111
- file dist/vibesurf
90
+ # Step 4: Check build results and handle platform-specific post-processing
91
+ PLATFORM=$(uname -s)
92
+ print_status "Detected platform: $PLATFORM"
93
+
94
+ if [ "$PLATFORM" = "Darwin" ]; then
95
+ # macOS - check for .app bundle
96
+ if [ -d "dist/VibeSurf.app" ]; then
97
+ print_success "macOS .app bundle built successfully!"
98
+
99
+ # Run macOS post-build script if it exists
100
+ if [ -f "macos-post-build.sh" ]; then
101
+ print_status "Running macOS post-build processing..."
102
+ chmod +x macos-post-build.sh
103
+ ./macos-post-build.sh
104
+ else
105
+ print_warning "macos-post-build.sh not found - skipping post-processing"
106
+ echo ""
107
+ echo "📊 App Bundle Information:"
108
+ echo "========================="
109
+ ls -lah dist/VibeSurf.app
110
+ echo ""
111
+ print_success "🎉 Build completed successfully!"
112
+ echo "📁 Your app is located at: ./dist/VibeSurf.app"
113
+ echo "🚀 To run: open ./dist/VibeSurf.app"
114
+ fi
115
+
116
+ else
117
+ print_error "Build failed - VibeSurf.app bundle not found"
118
+ exit 1
112
119
  fi
113
120
 
114
- echo ""
115
- print_success "🎉 Build completed successfully!"
116
- echo ""
117
- echo "📁 Your executable is located at: ./dist/vibesurf"
118
- echo "🚀 To run: ./dist/vibesurf"
119
- echo ""
120
-
121
121
  else
122
- print_error "Build failed - executable not found"
123
- exit 1
122
+ # Linux/Unix - check for regular executable
123
+ if [ -f "dist/vibesurf" ]; then
124
+ print_success "Executable built successfully!"
125
+
126
+ # Make executable and test
127
+ chmod +x dist/vibesurf
128
+
129
+ print_status "Testing executable..."
130
+ ./dist/vibesurf --help > /dev/null 2>&1 && {
131
+ print_success "Executable test passed!"
132
+ } || {
133
+ print_warning "Executable test failed, but this might be expected for CLI apps"
134
+ }
135
+
136
+ # Show file info
137
+ echo ""
138
+ echo "📊 Executable Information:"
139
+ echo "========================="
140
+ ls -lh dist/vibesurf
141
+
142
+ if command -v file &> /dev/null; then
143
+ file dist/vibesurf
144
+ fi
145
+
146
+ echo ""
147
+ print_success "🎉 Build completed successfully!"
148
+ echo ""
149
+ echo "📁 Your executable is located at: ./dist/vibesurf"
150
+ echo "🚀 To run: ./dist/vibesurf"
151
+ echo ""
152
+
153
+ else
154
+ print_error "Build failed - executable not found"
155
+ exit 1
156
+ fi
124
157
  fi
@@ -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.9a0'
32
- __version_tuple__ = version_tuple = (0, 1, 9, 'a0')
31
+ __version__ = version = '0.1.9a1'
32
+ __version_tuple__ = version_tuple = (0, 1, 9, 'a1')
33
33
 
34
- __commit_id__ = commit_id = 'g55ef49b4f'
34
+ __commit_id__ = commit_id = 'g3125abb4c'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vibesurf
3
- Version: 0.1.9a0
3
+ Version: 0.1.9a1
4
4
  Summary: VibeSurf: A powerful browser assistant for vibe surfing
5
5
  Author: Shao Warm
6
6
  License: Apache-2.0
@@ -26,7 +26,6 @@ Requires-Dist: json-repair>=0.48.0
26
26
  Requires-Dist: aiohttp>=3.12.15
27
27
  Requires-Dist: scikit-image>=0.25.2
28
28
  Requires-Dist: python-socks>=2.7.2
29
- Requires-Dist: browser-use==0.7.1
30
29
  Requires-Dist: langgraph>=0.6.4
31
30
  Requires-Dist: fastapi>=0.104.0
32
31
  Requires-Dist: uvicorn[standard]>=0.24.0
@@ -38,6 +37,7 @@ Requires-Dist: aiosqlite>=0.21.0
38
37
  Requires-Dist: rich>=13.0.0
39
38
  Requires-Dist: greenlet>=3.2.4
40
39
  Requires-Dist: getmac>=0.9.5
40
+ Requires-Dist: browser-use==0.7.1
41
41
  Dynamic: license-file
42
42
 
43
43
  # VibeSurf: A powerful browser assistant for vibe surfing
@@ -55,6 +55,7 @@ vibesurf.spec
55
55
  ./vibe_surf/chrome_extension/sidepanel.html
56
56
  ./vibe_surf/chrome_extension/icons/convert-svg.js
57
57
  ./vibe_surf/chrome_extension/icons/logo-preview.html
58
+ ./vibe_surf/chrome_extension/icons/logo.icns
58
59
  ./vibe_surf/chrome_extension/icons/logo.png
59
60
  ./vibe_surf/chrome_extension/scripts/api-client.js
60
61
  ./vibe_surf/chrome_extension/scripts/main.js
@@ -125,6 +126,7 @@ vibe_surf/chrome_extension/popup.html
125
126
  vibe_surf/chrome_extension/sidepanel.html
126
127
  vibe_surf/chrome_extension/icons/convert-svg.js
127
128
  vibe_surf/chrome_extension/icons/logo-preview.html
129
+ vibe_surf/chrome_extension/icons/logo.icns
128
130
  vibe_surf/chrome_extension/icons/logo.png
129
131
  vibe_surf/chrome_extension/scripts/api-client.js
130
132
  vibe_surf/chrome_extension/scripts/main.js
@@ -0,0 +1,242 @@
1
+ # -*- mode: python ; coding: utf-8 -*-
2
+
3
+ import os
4
+ import sys
5
+ import platform
6
+ from pathlib import Path
7
+
8
+ # Ensure using current environment's Python
9
+ python_path = sys.executable
10
+ print(f"Using Python: {python_path}")
11
+
12
+ block_cipher = None
13
+
14
+ # Dynamically find vibe_surf installation location
15
+ try:
16
+ import vibe_surf
17
+ vibe_surf_path = Path(vibe_surf.__file__).parent
18
+ print(f"VibeSurf package location: {vibe_surf_path}")
19
+ cli_path = vibe_surf_path / 'cli.py'
20
+ except ImportError:
21
+ # Fallback to relative path (development environment)
22
+ vibe_surf_path = Path.cwd() / 'vibe_surf'
23
+ cli_path = vibe_surf_path / 'cli.py'
24
+ print(f"Using development path: {vibe_surf_path}")
25
+
26
+ # Dynamically find browser_use installation location for prompt templates
27
+ try:
28
+ import browser_use
29
+ browser_use_path = Path(browser_use.__file__).parent
30
+ print(f"browser_use package location: {browser_use_path}")
31
+ except ImportError:
32
+ print("WARNING: browser_use not found, system prompts may not work in executable")
33
+ browser_use_path = None
34
+
35
+ # Check if CLI file exists
36
+ if not cli_path.exists():
37
+ print(f"ERROR: CLI file not found at {cli_path}")
38
+ print("Please ensure vibe_surf is properly installed or run from project directory")
39
+ sys.exit(1)
40
+
41
+ # Platform detection and configuration
42
+ current_platform = platform.system()
43
+ print(f"Building for platform: {current_platform}")
44
+
45
+ # Configure icon and console mode based on platform
46
+ if current_platform == "Darwin": # macOS
47
+ icon_file = vibe_surf_path / 'chrome_extension' / 'icons' / 'logo.icns'
48
+ console_mode = False # Windowed mode for macOS (equivalent to -w flag)
49
+ print(f"macOS detected - using ICNS icon and windowed mode")
50
+ elif current_platform == "Windows":
51
+ # Windows can use ICO or PNG, but prefer ICO if available
52
+ ico_file = vibe_surf_path / 'chrome_extension' / 'icons' / 'logo.ico'
53
+ if ico_file.exists():
54
+ icon_file = ico_file
55
+ print(f"Windows detected - using ICO icon")
56
+ else:
57
+ icon_file = vibe_surf_path / 'chrome_extension' / 'icons' / 'logo.png'
58
+ print(f"Windows detected - using PNG icon (ICO not found)")
59
+ console_mode = True
60
+ else: # Linux and other Unix-like systems
61
+ icon_file = vibe_surf_path / 'chrome_extension' / 'icons' / 'logo.png'
62
+ console_mode = True
63
+ print(f"Unix-like system detected - using PNG icon")
64
+
65
+ # Verify icon file exists
66
+ if not icon_file.exists():
67
+ print(f"WARNING: Icon file not found at {icon_file}")
68
+ icon_file = None
69
+ else:
70
+ print(f"Using icon: {icon_file}")
71
+
72
+ # Data files collection - include all necessary static files
73
+ datas = [
74
+ (str(vibe_surf_path / 'chrome_extension'), 'vibe_surf/chrome_extension'),
75
+ (str(vibe_surf_path / 'backend'), 'vibe_surf/backend'),
76
+ ]
77
+
78
+ # Add browser_use prompt template files if available
79
+ if browser_use_path:
80
+ browser_use_agent_path = browser_use_path / 'agent'
81
+ # Include the markdown system prompt files
82
+ prompt_files = [
83
+ 'system_prompt.md',
84
+ 'system_prompt_no_thinking.md',
85
+ 'system_prompt_flash.md'
86
+ ]
87
+ for prompt_file in prompt_files:
88
+ prompt_file_path = browser_use_agent_path / prompt_file
89
+ if prompt_file_path.exists():
90
+ datas.append((str(prompt_file_path), f'browser_use/agent'))
91
+ print(f"Added browser_use prompt file: {prompt_file}")
92
+ else:
93
+ print(f"WARNING: browser_use prompt file not found: {prompt_file_path}")
94
+
95
+ # Include JavaScript files for DOM operations
96
+ browser_use_dom_path = browser_use_path / 'dom'
97
+ if browser_use_dom_path.exists():
98
+ datas.append((str(browser_use_dom_path), 'browser_use/dom'))
99
+ print(f"Added browser_use DOM directory: {browser_use_dom_path}")
100
+
101
+ # Hidden imports - all dynamic imports that PyInstaller might miss
102
+ hiddenimports = [
103
+ # Core web framework
104
+ 'uvicorn.main',
105
+ 'uvicorn.config',
106
+ 'uvicorn.server',
107
+ 'uvicorn.protocols.http.auto',
108
+ 'uvicorn.protocols.websockets.auto',
109
+ 'uvicorn.lifespan.on',
110
+ 'fastapi.applications',
111
+ 'fastapi.routing',
112
+ 'fastapi.middleware',
113
+ 'fastapi.middleware.cors',
114
+
115
+ # Browser automation
116
+ 'browser_use',
117
+ 'cdp_use',
118
+
119
+ # HTTP and networking
120
+ 'aiohttp.web',
121
+ 'aiohttp.client',
122
+ 'websockets.server',
123
+ 'websockets.client',
124
+
125
+ # Database
126
+ 'sqlalchemy.dialects.sqlite',
127
+ 'sqlalchemy.pool',
128
+ 'aiosqlite',
129
+
130
+ # Core dependencies
131
+ 'rich.console',
132
+ 'rich.panel',
133
+ 'rich.prompt',
134
+ 'rich.text',
135
+ 'pydantic',
136
+ 'pydantic.main',
137
+ 'pydantic.fields',
138
+ 'langgraph',
139
+ 'langgraph.graph',
140
+
141
+ # Image processing
142
+ 'scikit-image',
143
+ 'skimage.io',
144
+ 'skimage.transform',
145
+
146
+ # JSON and data processing
147
+ 'json_repair',
148
+ 'uuid7',
149
+ 'psutil',
150
+ 'aiofiles',
151
+ 'anyio',
152
+ 'python_socks',
153
+ 'python_multipart',
154
+ 'python_dotenv',
155
+ 'greenlet',
156
+ 'getmac',
157
+ ]
158
+
159
+ # Analysis configuration
160
+ a = Analysis(
161
+ [str(cli_path)],
162
+ pathex=[str(vibe_surf_path.parent)],
163
+ binaries=[],
164
+ datas=datas,
165
+ hiddenimports=hiddenimports,
166
+ hookspath=[],
167
+ hooksconfig={},
168
+ runtime_hooks=[],
169
+ excludes=[
170
+ 'matplotlib', # Large plotting library not needed
171
+ 'tkinter', # GUI library not needed
172
+ 'PyQt5', # GUI library not needed
173
+ 'PyQt6', # GUI library not needed
174
+ 'PySide2', # GUI library not needed
175
+ 'PySide6', # GUI library not needed
176
+ 'jupyter', # Jupyter notebook not needed
177
+ 'IPython', # Interactive Python not needed
178
+ ],
179
+ win_no_prefer_redirects=False,
180
+ win_private_assemblies=False,
181
+ cipher=block_cipher,
182
+ noarchive=False,
183
+ )
184
+
185
+ # Remove duplicate files to reduce size
186
+ pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
187
+
188
+ # Create executable - icon configuration depends on platform
189
+ exe = EXE(
190
+ pyz,
191
+ a.scripts,
192
+ a.binaries,
193
+ a.zipfiles,
194
+ a.datas,
195
+ [],
196
+ name='vibesurf',
197
+ debug=False,
198
+ bootloader_ignore_signals=False,
199
+ strip=False,
200
+ upx=True, # Compress to reduce file size
201
+ upx_exclude=[],
202
+ runtime_tmpdir=None,
203
+ console=console_mode,
204
+ disable_windowed_traceback=False,
205
+ target_arch=None,
206
+ codesign_identity=None,
207
+ entitlements_file=None,
208
+ # For macOS, icon is set in BUNDLE; for others, set in EXE
209
+ icon=None if current_platform == "Darwin" else (str(icon_file) if icon_file else None),
210
+ )
211
+
212
+ # For macOS, create a proper .app bundle
213
+ if current_platform == "Darwin":
214
+ app = BUNDLE(
215
+ exe,
216
+ name='VibeSurf.app',
217
+ icon=str(icon_file) if icon_file else None, # macOS icon set here
218
+ bundle_identifier='com.vibesurf.app',
219
+ version='1.0.0',
220
+ info_plist={
221
+ 'CFBundleName': 'VibeSurf',
222
+ 'CFBundleDisplayName': 'VibeSurf',
223
+ 'CFBundleIdentifier': 'com.vibesurf.app',
224
+ 'CFBundleVersion': '1.0.0',
225
+ 'CFBundleShortVersionString': '1.0.0',
226
+ 'CFBundleExecutable': 'vibesurf',
227
+ 'CFBundleIconFile': 'logo.icns',
228
+ 'NSHighResolutionCapable': True,
229
+ 'LSApplicationCategoryType': 'public.app-category.developer-tools',
230
+ 'NSAppleEventsUsageDescription': 'VibeSurf needs Apple Events access for browser automation.',
231
+ 'NSCameraUsageDescription': 'VibeSurf may need camera access for certain automation tasks.',
232
+ 'NSMicrophoneUsageDescription': 'VibeSurf may need microphone access for certain automation tasks.',
233
+ 'NSScreenCaptureUsageDescription': 'VibeSurf needs screen capture access for browser automation.',
234
+ 'LSMinimumSystemVersion': '10.13.0',
235
+ },
236
+ codesign_identity=None, # Set this to your Developer ID if you have one
237
+ entitlements_file=None,
238
+ )
239
+ print("Created macOS .app bundle: VibeSurf.app")
240
+ print(f"Bundle icon: {icon_file}")
241
+ else:
242
+ print(f"Executable icon: {icon_file}")
@@ -1,145 +0,0 @@
1
- # -*- mode: python ; coding: utf-8 -*-
2
-
3
- import os
4
- import sys
5
- from pathlib import Path
6
-
7
- # Ensure using current environment's Python
8
- python_path = sys.executable
9
- print(f"Using Python: {python_path}")
10
-
11
- block_cipher = None
12
-
13
- # Dynamically find vibe_surf installation location
14
- try:
15
- import vibe_surf
16
- vibe_surf_path = Path(vibe_surf.__file__).parent
17
- print(f"VibeSurf package location: {vibe_surf_path}")
18
- cli_path = vibe_surf_path / 'cli.py'
19
- except ImportError:
20
- # Fallback to relative path (development environment)
21
- vibe_surf_path = Path.cwd() / 'vibe_surf'
22
- cli_path = vibe_surf_path / 'cli.py'
23
- print(f"Using development path: {vibe_surf_path}")
24
-
25
- # Check if CLI file exists
26
- if not cli_path.exists():
27
- print(f"ERROR: CLI file not found at {cli_path}")
28
- print("Please ensure vibe_surf is properly installed or run from project directory")
29
- sys.exit(1)
30
-
31
- # Data files collection - include all necessary static files
32
- datas = [
33
- (str(vibe_surf_path / 'chrome_extension'), 'vibe_surf/chrome_extension'),
34
- (str(vibe_surf_path / 'backend'), 'vibe_surf/backend'),
35
- ]
36
-
37
- # Hidden imports - all dynamic imports that PyInstaller might miss
38
- hiddenimports = [
39
- # Core web framework
40
- 'uvicorn.main',
41
- 'uvicorn.config',
42
- 'uvicorn.server',
43
- 'uvicorn.protocols.http.auto',
44
- 'uvicorn.protocols.websockets.auto',
45
- 'uvicorn.lifespan.on',
46
- 'fastapi.applications',
47
- 'fastapi.routing',
48
- 'fastapi.middleware',
49
- 'fastapi.middleware.cors',
50
-
51
- # Browser automation
52
- 'browser_use',
53
- 'cdp_use',
54
-
55
- # HTTP and networking
56
- 'aiohttp.web',
57
- 'aiohttp.client',
58
- 'websockets.server',
59
- 'websockets.client',
60
-
61
- # Database
62
- 'sqlalchemy.dialects.sqlite',
63
- 'sqlalchemy.pool',
64
- 'aiosqlite',
65
-
66
- # Core dependencies
67
- 'rich.console',
68
- 'rich.panel',
69
- 'rich.prompt',
70
- 'rich.text',
71
- 'pydantic',
72
- 'pydantic.main',
73
- 'pydantic.fields',
74
- 'langgraph',
75
- 'langgraph.graph',
76
-
77
- # Image processing
78
- 'scikit-image',
79
- 'skimage.io',
80
- 'skimage.transform',
81
-
82
- # JSON and data processing
83
- 'json_repair',
84
- 'uuid7',
85
- 'psutil',
86
- 'aiofiles',
87
- 'anyio',
88
- 'python_socks',
89
- 'python_multipart',
90
- 'python_dotenv',
91
- 'greenlet',
92
- 'getmac',
93
- ]
94
-
95
- # Analysis configuration
96
- a = Analysis(
97
- [str(cli_path)],
98
- pathex=[str(vibe_surf_path.parent)],
99
- binaries=[],
100
- datas=datas,
101
- hiddenimports=hiddenimports,
102
- hookspath=[],
103
- hooksconfig={},
104
- runtime_hooks=[],
105
- excludes=[
106
- 'matplotlib', # Large plotting library not needed
107
- 'tkinter', # GUI library not needed
108
- 'PyQt5', # GUI library not needed
109
- 'PyQt6', # GUI library not needed
110
- 'PySide2', # GUI library not needed
111
- 'PySide6', # GUI library not needed
112
- 'jupyter', # Jupyter notebook not needed
113
- 'IPython', # Interactive Python not needed
114
- ],
115
- win_no_prefer_redirects=False,
116
- win_private_assemblies=False,
117
- cipher=block_cipher,
118
- noarchive=False,
119
- )
120
-
121
- # Remove duplicate files to reduce size
122
- pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
123
-
124
- # Create executable
125
- exe = EXE(
126
- pyz,
127
- a.scripts,
128
- a.binaries,
129
- a.zipfiles,
130
- a.datas,
131
- [],
132
- name='vibesurf',
133
- debug=False,
134
- bootloader_ignore_signals=False,
135
- strip=False,
136
- upx=True, # Compress to reduce file size
137
- upx_exclude=[],
138
- runtime_tmpdir=None,
139
- console=True,
140
- disable_windowed_traceback=False,
141
- target_arch=None,
142
- codesign_identity=None,
143
- entitlements_file=None,
144
- icon=str(vibe_surf_path / 'chrome_extension' / 'icons' / 'logo.png'),
145
- )
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -27,7 +27,6 @@ dependencies = [
27
27
  "aiohttp>=3.12.15",
28
28
  "scikit-image>=0.25.2",
29
29
  "python-socks>=2.7.2",
30
- "browser-use==0.7.1",
31
30
  "langgraph>=0.6.4",
32
31
  "fastapi>=0.104.0",
33
32
  "uvicorn[standard]>=0.24.0",
@@ -39,6 +38,7 @@ dependencies = [
39
38
  "rich>=13.0.0",
40
39
  "greenlet>=3.2.4",
41
40
  "getmac>=0.9.5",
41
+ "browser-use==0.7.1",
42
42
  ]
43
43
 
44
44
  [project.urls]
File without changes
File without changes
@@ -8,7 +8,6 @@ json-repair>=0.48.0
8
8
  aiohttp>=3.12.15
9
9
  scikit-image>=0.25.2
10
10
  python-socks>=2.7.2
11
- browser-use==0.7.1
12
11
  langgraph>=0.6.4
13
12
  fastapi>=0.104.0
14
13
  uvicorn[standard]>=0.24.0
@@ -20,3 +19,4 @@ aiosqlite>=0.21.0
20
19
  rich>=13.0.0
21
20
  greenlet>=3.2.4
22
21
  getmac>=0.9.5
22
+ browser-use==0.7.1