vibesurf 0.1.8__tar.gz → 0.1.9a0__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 (90) hide show
  1. vibesurf-0.1.9a0/.github/workflows/publish.yml +230 -0
  2. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/.gitignore +2 -1
  3. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/PKG-INFO +1 -1
  4. vibesurf-0.1.9a0/build-local.bat +120 -0
  5. vibesurf-0.1.9a0/build-local.sh +124 -0
  6. vibesurf-0.1.9a0/docs/EXECUTABLE_BUILD.md +197 -0
  7. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/_version.py +3 -3
  8. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/cli.py +9 -2
  9. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibesurf.egg-info/PKG-INFO +1 -1
  10. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibesurf.egg-info/SOURCES.txt +4 -0
  11. vibesurf-0.1.9a0/vibesurf.spec +145 -0
  12. vibesurf-0.1.8/.github/workflows/publish.yml +0 -98
  13. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/.env.example +0 -0
  14. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/.python-version +0 -0
  15. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/LICENSE +0 -0
  16. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/MANIFEST.in +0 -0
  17. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/README.md +0 -0
  18. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/docs/PYPI_SETUP.md +0 -0
  19. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/pyproject.toml +0 -0
  20. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/setup.cfg +0 -0
  21. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/tests/test_agents.py +0 -0
  22. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/tests/test_backend_api.py +0 -0
  23. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/tests/test_browser.py +0 -0
  24. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/tests/test_controller.py +0 -0
  25. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/__init__.py +0 -0
  26. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/agents/__init__.py +0 -0
  27. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/agents/browser_use_agent.py +0 -0
  28. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/agents/prompts/__init__.py +0 -0
  29. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/agents/prompts/vibe_surf_prompt.py +0 -0
  30. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/agents/report_writer_agent.py +0 -0
  31. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/agents/vibe_surf_agent.py +0 -0
  32. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/__init__.py +0 -0
  33. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/api/__init__.py +0 -0
  34. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/api/activity.py +0 -0
  35. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/api/config.py +0 -0
  36. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/api/files.py +0 -0
  37. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/api/models.py +0 -0
  38. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/api/task.py +0 -0
  39. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/database/__init__.py +0 -0
  40. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/database/manager.py +0 -0
  41. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/database/models.py +0 -0
  42. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/database/queries.py +0 -0
  43. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/database/schemas.py +0 -0
  44. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/llm_config.py +0 -0
  45. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/main.py +0 -0
  46. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/migrations/__init__.py +0 -0
  47. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/migrations/init_db.py +0 -0
  48. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/migrations/seed_data.py +0 -0
  49. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/shared_state.py +0 -0
  50. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/utils/__init__.py +0 -0
  51. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/utils/encryption.py +0 -0
  52. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/utils/llm_factory.py +0 -0
  53. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/browser/__init__.py +0 -0
  54. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/browser/agen_browser_profile.py +0 -0
  55. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/browser/agent_browser_session.py +0 -0
  56. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/browser/browser_manager.py +0 -0
  57. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/browser/utils.py +0 -0
  58. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/browser/watchdogs/__init__.py +0 -0
  59. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/browser/watchdogs/action_watchdog.py +0 -0
  60. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/browser/watchdogs/dom_watchdog.py +0 -0
  61. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/background.js +0 -0
  62. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/config.js +0 -0
  63. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/content.js +0 -0
  64. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/dev-reload.js +0 -0
  65. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/icons/convert-svg.js +0 -0
  66. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/icons/logo-preview.html +0 -0
  67. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/icons/logo.png +0 -0
  68. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/manifest.json +0 -0
  69. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/popup.html +0 -0
  70. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/scripts/api-client.js +0 -0
  71. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/scripts/main.js +0 -0
  72. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/scripts/markdown-it.min.js +0 -0
  73. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/scripts/session-manager.js +0 -0
  74. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/scripts/ui-manager.js +0 -0
  75. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/sidepanel.html +0 -0
  76. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/styles/animations.css +0 -0
  77. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/styles/components.css +0 -0
  78. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/styles/main.css +0 -0
  79. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/styles/settings.css +0 -0
  80. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/controller/__init__.py +0 -0
  81. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/controller/file_system.py +0 -0
  82. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/controller/mcp_client.py +0 -0
  83. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/controller/vibesurf_tools.py +0 -0
  84. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/controller/views.py +0 -0
  85. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/llm/__init__.py +0 -0
  86. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/llm/openai_compatible.py +0 -0
  87. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibesurf.egg-info/dependency_links.txt +0 -0
  88. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibesurf.egg-info/entry_points.txt +0 -0
  89. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibesurf.egg-info/requires.txt +0 -0
  90. {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibesurf.egg-info/top_level.txt +0 -0
@@ -0,0 +1,230 @@
1
+ name: Build and Publish
2
+
3
+ on:
4
+ release:
5
+ types: [published, edited]
6
+ workflow_dispatch: # Allow manual trigger
7
+
8
+ jobs:
9
+ test:
10
+ runs-on: ubuntu-latest
11
+ strategy:
12
+ matrix:
13
+ python-version: ['3.11', '3.12']
14
+
15
+ steps:
16
+ - uses: actions/checkout@v4
17
+ with:
18
+ ref: 'main' # Always checkout main branch for latest code
19
+ fetch-depth: 0 # Full history for setuptools-scm
20
+
21
+ - name: Set up Python ${{ matrix.python-version }}
22
+ uses: actions/setup-python@v5
23
+ with:
24
+ python-version: ${{ matrix.python-version }}
25
+
26
+ - name: Install dependencies
27
+ run: |
28
+ python -m pip install --upgrade pip
29
+ pip install build pytest
30
+ pip install -e .
31
+
32
+ - name: Test CLI import
33
+ run: |
34
+ python -c "import vibe_surf; print(f'VibeSurf version: {vibe_surf.__version__}')"
35
+ python -c "from vibe_surf.cli import main; print('CLI import successful')"
36
+
37
+ build-wheels:
38
+ needs: test
39
+ runs-on: ubuntu-latest
40
+
41
+ steps:
42
+ - uses: actions/checkout@v4
43
+ with:
44
+ ref: 'main' # Always checkout main branch for latest code
45
+ fetch-depth: 0 # Full history for setuptools-scm
46
+
47
+ - name: Set up Python
48
+ uses: actions/setup-python@v5
49
+ with:
50
+ python-version: '3.11'
51
+
52
+ - name: Install build dependencies
53
+ run: |
54
+ python -m pip install --upgrade pip
55
+ pip install build setuptools-scm[toml]
56
+
57
+ - name: Build package
58
+ run: python -m build
59
+
60
+ - name: Check built package
61
+ run: |
62
+ pip install twine
63
+ twine check dist/*
64
+
65
+ # Show package contents
66
+ echo "=== Built packages ==="
67
+ ls -la dist/
68
+
69
+ echo "=== Package info ==="
70
+ python -m pip install dist/*.whl
71
+ python -c "import vibe_surf; print(f'Installed version: {vibe_surf.__version__}')"
72
+
73
+ - name: Upload build artifacts
74
+ uses: actions/upload-artifact@v4
75
+ with:
76
+ name: dist
77
+ path: dist/
78
+
79
+ build-executables:
80
+ needs: test
81
+ strategy:
82
+ matrix:
83
+ include:
84
+ # Windows x64
85
+ - os: windows-latest
86
+ asset_name: vibesurf-windows-x64.exe
87
+ activate_cmd: .venv\Scripts\activate.bat
88
+ # macOS Intel (x86_64) - compatible with Apple Silicon via Rosetta 2
89
+ - os: macos-13
90
+ asset_name: vibesurf-macos-intel-x64
91
+ activate_cmd: source .venv/bin/activate
92
+ # macOS Apple Silicon (arm64) - native performance
93
+ - os: macos-14
94
+ asset_name: vibesurf-macos-apple-silicon
95
+ activate_cmd: source .venv/bin/activate
96
+ # Linux x64
97
+ - os: ubuntu-latest
98
+ asset_name: vibesurf-linux-x64
99
+ activate_cmd: source .venv/bin/activate
100
+
101
+ runs-on: ${{ matrix.os }}
102
+
103
+ steps:
104
+ - uses: actions/checkout@v4
105
+ with:
106
+ ref: 'main' # Always checkout main branch for latest code
107
+ fetch-depth: 0
108
+
109
+ # Add diagnostic logging
110
+ - name: Debug checkout and dependencies
111
+ shell: bash
112
+ run: |
113
+ echo "=== Git info ==="
114
+ git branch
115
+ git log --oneline -5
116
+ echo "=== pyproject.toml dependencies ==="
117
+ grep -A 20 "dependencies = \[" pyproject.toml || echo "No dependencies section found"
118
+ echo "=== vibe_surf/__init__.py ==="
119
+ head -5 vibe_surf/__init__.py || echo "No __init__.py found"
120
+
121
+ # Install uv (key step for consistent environment)
122
+ - name: Install uv
123
+ uses: astral-sh/setup-uv@v3
124
+ with:
125
+ version: "latest"
126
+
127
+ # Create uv environment and install current repository code
128
+ - name: Create uv environment
129
+ shell: bash
130
+ run: |
131
+ echo "=== Creating uv environment ==="
132
+ uv venv --python 3.12
133
+
134
+ echo "=== Installing dependencies (all platforms use uv) ==="
135
+ uv pip install -e .
136
+ uv pip install pyinstaller
137
+ echo "=== Installed packages ==="
138
+ uv pip list
139
+
140
+ # Verify environment using uv run (cross-platform)
141
+ - name: Verify environment with uv run
142
+ shell: bash
143
+ run: |
144
+ echo "=== Environment verification using uv run ==="
145
+ echo "Python version:"
146
+ uv run python --version
147
+ echo "Testing dotenv import:"
148
+ uv run python -c "from dotenv import load_dotenv; print('dotenv available')"
149
+ echo "Testing vibe_surf import:"
150
+ uv run python -c "import vibe_surf; print('vibe_surf available')"
151
+ echo "Testing CLI import:"
152
+ uv run python -c "from vibe_surf.cli import main; print('CLI available')"
153
+
154
+ # Build executable using uv run (cross-platform)
155
+ - name: Build executable with uv run
156
+ shell: bash
157
+ run: |
158
+ echo "=== Building executable with uv run ==="
159
+ echo "Python version check:"
160
+ uv run python --version
161
+ echo "Running PyInstaller..."
162
+ uv run pyinstaller vibesurf.spec --clean --noconfirm
163
+
164
+ - name: Prepare executable
165
+ shell: bash
166
+ run: |
167
+ if [[ "$RUNNER_OS" == "Windows" ]]; then
168
+ mv dist/vibesurf.exe dist/${{ matrix.asset_name }}
169
+ else
170
+ mv dist/vibesurf dist/${{ matrix.asset_name }}
171
+ chmod +x dist/${{ matrix.asset_name }}
172
+ fi
173
+
174
+ - name: Test executable
175
+ shell: bash
176
+ run: |
177
+ # Basic test to ensure executable runs
178
+ if [[ "$RUNNER_OS" == "Windows" ]]; then
179
+ echo "Testing Windows executable..."
180
+ # Simple existence check for Windows
181
+ ls -la dist/${{ matrix.asset_name }}
182
+ else
183
+ echo "Testing Unix executable..."
184
+ ./dist/${{ matrix.asset_name }} --help || echo "Basic test completed"
185
+ fi
186
+
187
+ - name: Upload executable
188
+ uses: actions/upload-artifact@v4
189
+ with:
190
+ name: ${{ matrix.asset_name }}
191
+ path: dist/${{ matrix.asset_name }}
192
+
193
+ publish-pypi:
194
+ needs: [test, build-wheels]
195
+ runs-on: ubuntu-latest
196
+ environment: release
197
+ permissions:
198
+ id-token: write # Required for trusted publishing
199
+
200
+ steps:
201
+ - name: Download build artifacts
202
+ uses: actions/download-artifact@v4
203
+ with:
204
+ name: dist
205
+ path: dist/
206
+
207
+ - name: Publish to PyPI
208
+ uses: pypa/gh-action-pypi-publish@release/v1
209
+ with:
210
+ password: ${{ secrets.PYPI_API_TOKEN }}
211
+ # Use the following line if you want to use trusted publishing instead
212
+ # skip-existing: true
213
+
214
+ publish-executables:
215
+ needs: [test, build-executables]
216
+ runs-on: ubuntu-latest
217
+ if: github.event_name == 'release'
218
+
219
+ steps:
220
+ - name: Download all artifacts
221
+ uses: actions/download-artifact@v4
222
+
223
+ - name: Upload executables to release
224
+ uses: softprops/action-gh-release@v1
225
+ with:
226
+ files: |
227
+ vibesurf-windows-x64.exe/vibesurf-windows-x64.exe
228
+ vibesurf-macos-intel-x64/vibesurf-macos-intel-x64
229
+ vibesurf-macos-apple-silicon/vibesurf-macos-apple-silicon
230
+ vibesurf-linux-x64/vibesurf-linux-x64
@@ -19,4 +19,5 @@ uv.lock
19
19
  swarmsurf_workspace
20
20
  workspace
21
21
  *.db
22
- vibe_surf/_version.py
22
+ vibe_surf/_version.py
23
+ .build-env
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vibesurf
3
- Version: 0.1.8
3
+ Version: 0.1.9a0
4
4
  Summary: VibeSurf: A powerful browser assistant for vibe surfing
5
5
  Author: Shao Warm
6
6
  License: Apache-2.0
@@ -0,0 +1,120 @@
1
+ @echo off
2
+ :: Local build script for Windows
3
+ :: This script creates a uv environment and builds a standalone executable
4
+
5
+ setlocal enabledelayedexpansion
6
+
7
+ echo 🚀 VibeSurf Local Build Script for Windows
8
+ echo ==========================================
9
+
10
+ :: Check if uv is installed
11
+ where uv >nul 2>nul
12
+ if %ERRORLEVEL% neq 0 (
13
+ echo [ERROR] uv is not installed. Please install it first:
14
+ echo powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
15
+ exit /b 1
16
+ )
17
+
18
+ echo [SUCCESS] uv is installed
19
+
20
+ :: Use dedicated build environment directory
21
+ set BUILD_ENV=.build-env
22
+
23
+ :: Clean up existing build environment if it exists
24
+ if exist "%BUILD_ENV%" (
25
+ echo [WARNING] Removing existing build environment directory
26
+ rmdir /s /q "%BUILD_ENV%"
27
+ )
28
+
29
+ :: Step 1: Create dedicated build environment
30
+ echo [INFO] Creating dedicated build environment with Python 3.12...
31
+ uv venv %BUILD_ENV% --python 3.12
32
+ if %ERRORLEVEL% neq 0 (
33
+ echo [ERROR] Failed to create build environment
34
+ exit /b 1
35
+ )
36
+
37
+ :: Step 2: Activate build environment and install dependencies
38
+ echo [INFO] Activating build environment and installing dependencies...
39
+ call %BUILD_ENV%\Scripts\activate.bat
40
+
41
+ :: Verify Python version
42
+ python --version
43
+ if %ERRORLEVEL% neq 0 (
44
+ echo [ERROR] Failed to activate Python environment
45
+ exit /b 1
46
+ )
47
+
48
+ :: Install local VibeSurf and PyInstaller
49
+ echo [INFO] Installing local vibesurf in development mode and pyinstaller...
50
+ uv pip install -e .
51
+ if %ERRORLEVEL% neq 0 (
52
+ echo [ERROR] Failed to install local vibesurf
53
+ exit /b 1
54
+ )
55
+
56
+ uv pip install pyinstaller
57
+ if %ERRORLEVEL% neq 0 (
58
+ echo [ERROR] Failed to install pyinstaller
59
+ exit /b 1
60
+ )
61
+
62
+ :: Verify installation
63
+ echo [INFO] Verifying installation...
64
+ python -c "import vibe_surf; print(f'VibeSurf version: {vibe_surf.__version__}')"
65
+ if %ERRORLEVEL% neq 0 (
66
+ echo [ERROR] Failed to import vibe_surf
67
+ exit /b 1
68
+ )
69
+
70
+ python -c "from vibe_surf.cli import main; print('CLI import successful')"
71
+ if %ERRORLEVEL% neq 0 (
72
+ echo [ERROR] Failed to import CLI
73
+ exit /b 1
74
+ )
75
+
76
+ :: Step 3: Build executable
77
+ echo [INFO] Building executable with PyInstaller...
78
+ if not exist "vibesurf.spec" (
79
+ echo [ERROR] vibesurf.spec file not found!
80
+ exit /b 1
81
+ )
82
+
83
+ pyinstaller vibesurf.spec --clean --noconfirm
84
+ if %ERRORLEVEL% neq 0 (
85
+ echo [ERROR] PyInstaller build failed
86
+ exit /b 1
87
+ )
88
+
89
+ :: Step 4: Test executable
90
+ if exist "dist\vibesurf.exe" (
91
+ echo [SUCCESS] Executable built successfully!
92
+
93
+ echo [INFO] Testing executable...
94
+ dist\vibesurf.exe --help >nul 2>&1
95
+ if %ERRORLEVEL% equ 0 (
96
+ echo [SUCCESS] Executable test passed!
97
+ ) else (
98
+ echo [WARNING] Executable test failed, but this might be expected for CLI apps
99
+ )
100
+
101
+ :: Show file info
102
+ echo.
103
+ echo 📊 Executable Information:
104
+ echo =========================
105
+ dir /q dist\vibesurf.exe
106
+
107
+ echo.
108
+ echo [SUCCESS] 🎉 Build completed successfully!
109
+ echo.
110
+ echo 📁 Your executable is located at: .\dist\vibesurf.exe
111
+ echo 🚀 To run: .\dist\vibesurf.exe
112
+ echo.
113
+
114
+ ) else (
115
+ echo [ERROR] Build failed - executable not found
116
+ exit /b 1
117
+ )
118
+
119
+ echo Press any key to exit...
120
+ pause >nul
@@ -0,0 +1,124 @@
1
+ #!/bin/bash
2
+ # Local build script for Unix-like systems (Linux/macOS)
3
+ # This script creates a uv environment and builds a standalone executable
4
+
5
+ set -e # Exit on any error
6
+
7
+ echo "🚀 VibeSurf Local Build Script"
8
+ echo "=============================="
9
+
10
+ # Colors for output
11
+ RED='\033[0;31m'
12
+ GREEN='\033[0;32m'
13
+ YELLOW='\033[1;33m'
14
+ CYAN='\033[0;36m'
15
+ NC='\033[0m' # No Color
16
+
17
+ # Function to print colored output
18
+ print_status() {
19
+ echo -e "${CYAN}[INFO]${NC} $1"
20
+ }
21
+
22
+ print_success() {
23
+ echo -e "${GREEN}[SUCCESS]${NC} $1"
24
+ }
25
+
26
+ print_warning() {
27
+ echo -e "${YELLOW}[WARNING]${NC} $1"
28
+ }
29
+
30
+ print_error() {
31
+ echo -e "${RED}[ERROR]${NC} $1"
32
+ }
33
+
34
+ # Check if uv is installed
35
+ if ! command -v uv &> /dev/null; then
36
+ print_error "uv is not installed. Please install it first:"
37
+ echo "curl -LsSf https://astral.sh/uv/install.sh | sh"
38
+ exit 1
39
+ fi
40
+
41
+ print_success "uv is installed"
42
+
43
+ # Use dedicated build environment directory
44
+ BUILD_ENV=".build-env"
45
+
46
+ # Clean up existing build environment if it exists
47
+ if [ -d "$BUILD_ENV" ]; then
48
+ print_warning "Removing existing build environment directory"
49
+ rm -rf "$BUILD_ENV"
50
+ fi
51
+
52
+ # Step 1: Create dedicated build environment
53
+ print_status "Creating dedicated build environment with Python 3.12..."
54
+ uv venv "$BUILD_ENV" --python 3.12
55
+
56
+ # Step 2: Activate build environment and install dependencies
57
+ print_status "Activating build environment and installing dependencies..."
58
+ source "$BUILD_ENV/bin/activate"
59
+
60
+ # Verify Python version
61
+ PYTHON_VERSION=$(python --version)
62
+ print_success "Using Python: $PYTHON_VERSION"
63
+
64
+ # Install local VibeSurf and PyInstaller
65
+ print_status "Installing local vibesurf in development mode and pyinstaller..."
66
+ uv pip install -e .
67
+ uv pip install pyinstaller
68
+
69
+ # Verify installation
70
+ print_status "Verifying installation..."
71
+ python -c "import vibe_surf; print(f'VibeSurf version: {vibe_surf.__version__}')" || {
72
+ print_error "Failed to import vibe_surf"
73
+ exit 1
74
+ }
75
+
76
+ python -c "from vibe_surf.cli import main; print('CLI import successful')" || {
77
+ print_error "Failed to import CLI"
78
+ exit 1
79
+ }
80
+
81
+ # Step 3: Build executable
82
+ print_status "Building executable with PyInstaller..."
83
+ if [ ! -f "vibesurf.spec" ]; then
84
+ print_error "vibesurf.spec file not found!"
85
+ exit 1
86
+ fi
87
+
88
+ pyinstaller vibesurf.spec --clean --noconfirm
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
112
+ fi
113
+
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
+ else
122
+ print_error "Build failed - executable not found"
123
+ exit 1
124
+ fi
@@ -0,0 +1,197 @@
1
+ # VibeSurf Executable Build Guide
2
+
3
+ This guide explains how to build standalone executable files for VibeSurf that can run without requiring Python installation.
4
+
5
+ ## 🎯 Overview
6
+
7
+ VibeSurf can be packaged into standalone executables for:
8
+ - **Windows**: `vibesurf-windows-x64.exe`
9
+ - **macOS Intel**: `vibesurf-macos-intel-x64` (compatible with Apple Silicon via Rosetta 2)
10
+ - **macOS Apple Silicon**: `vibesurf-macos-apple-silicon` (native arm64 performance)
11
+ - **Linux**: `vibesurf-linux-x64`
12
+
13
+ ## 🔧 Local Build Instructions
14
+
15
+ ### Prerequisites
16
+
17
+ 1. **Install uv** (Python package manager):
18
+ ```bash
19
+ # On macOS and Linux
20
+ curl -LsSf https://astral.sh/uv/install.sh | sh
21
+
22
+ # On Windows (PowerShell)
23
+ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
24
+ ```
25
+
26
+ 2. **Clone the repository**:
27
+ ```bash
28
+ git clone https://github.com/your-repo/VibeSurf.git
29
+ cd VibeSurf
30
+ ```
31
+
32
+ ### Building on Linux/macOS
33
+
34
+ 1. **Run the build script**:
35
+ ```bash
36
+ chmod +x build-local.sh
37
+ ./build-local.sh
38
+ ```
39
+
40
+ 2. **Find your executable**:
41
+ - Location: `./dist/vibesurf`
42
+ - Run with: `./dist/vibesurf`
43
+
44
+ **Note**:
45
+ - The script creates a dedicated `.build-env` directory for building, preserving your existing `.venv`
46
+ - Uses your current local code (`-e .`), not the PyPI published version
47
+
48
+ ### Building on Windows
49
+
50
+ 1. **Run the build script**:
51
+ ```cmd
52
+ build-local.bat
53
+ ```
54
+
55
+ 2. **Find your executable**:
56
+ - Location: `.\dist\vibesurf.exe`
57
+ - Run with: `.\dist\vibesurf.exe`
58
+
59
+ **Note**:
60
+ - The script creates a dedicated `.build-env` directory for building, preserving your existing `.venv`
61
+ - Uses your current local code (`-e .`), not the PyPI published version
62
+
63
+ ## 🧪 Testing the Executable
64
+
65
+ ### Basic Test
66
+ ```bash
67
+ # Linux/macOS
68
+ ./dist/vibesurf --help
69
+
70
+ # Windows
71
+ .\dist\vibesurf.exe --help
72
+ ```
73
+
74
+ ### Full Test
75
+ ```bash
76
+ # Linux/macOS
77
+ ./dist/vibesurf
78
+
79
+ # Windows
80
+ .\dist\vibesurf.exe
81
+ ```
82
+
83
+ The executable should:
84
+ 1. Display the VibeSurf logo
85
+ 2. Show version information
86
+ 3. Detect browsers automatically
87
+ 4. Configure ports and start the backend
88
+
89
+ ## 📦 What's Included
90
+
91
+ The executable contains:
92
+ - **Complete Python runtime** (Python 3.12)
93
+ - **All VibeSurf dependencies** (FastAPI, uvicorn, browser-use, etc.)
94
+ - **Chrome extension files** (bundled within the executable)
95
+ - **Backend API and database components**
96
+ - **VibeSurf logo as executable icon** (from `vibe_surf/chrome_extension/icons/logo.png`)
97
+
98
+ ## 🔍 Build Process Details
99
+
100
+ ### Environment Setup
101
+
102
+ **Local Building:**
103
+ - Creates isolated `uv` build environment (`.build-env`) with Python 3.12
104
+ - Preserves existing development environment (`.venv`)
105
+ - Installs local VibeSurf in development mode (`-e .`) for latest code
106
+ - Adds PyInstaller for building
107
+
108
+ **GitHub Actions Building:**
109
+ - Uses matrix strategy with native OS runners (Windows, macOS, Linux)
110
+ - Each runner builds the executable for its native platform
111
+ - Installs current repository code (`-e .`) at release time
112
+ - Ensures executables match the exact released code version
113
+
114
+ ### PyInstaller Configuration
115
+ - **Entry point**: `vibe_surf/cli.py`
116
+ - **Data files**: Chrome extension, backend templates
117
+ - **Hidden imports**: All dynamic imports declared
118
+ - **Exclusions**: Removes unnecessary packages (matplotlib, tkinter)
119
+ - **Compression**: Uses UPX for smaller file size
120
+ - **Icon**: VibeSurf logo embedded as executable icon
121
+
122
+ ### Output
123
+ - **File size**: ~100-200MB (varies by platform)
124
+ - **Startup time**: 2-5 seconds (first run)
125
+ - **Dependencies**: None (fully self-contained)
126
+
127
+ ## 🚀 Distribution
128
+
129
+ ### Manual Distribution
130
+ 1. Build the executable for your target platform
131
+ 2. Copy the `dist/vibesurf*` file to target machines
132
+ 3. Users can run directly without any installation
133
+
134
+ ### GitHub Releases (Automated)
135
+ The repository includes GitHub Actions workflows that automatically:
136
+ 1. **Multi-platform building**: Uses GitHub runners for each target platform
137
+ - `windows-latest` → `vibesurf-windows-x64.exe`
138
+ - `macos-13` (Intel) → `vibesurf-macos-intel-x64`
139
+ - `macos-14` (Apple Silicon) → `vibesurf-macos-apple-silicon`
140
+ - `ubuntu-latest` → `vibesurf-linux-x64`
141
+ 2. **Current code**: Builds from the repository code at release time (`-e .`)
142
+ 3. **Upload binaries**: Automatically uploads all platform executables to GitHub Releases
143
+ 4. **User downloads**: Platform-specific executables ready for distribution
144
+
145
+ **macOS Compatibility:**
146
+ - **Intel build**: Works on Intel Macs natively, Apple Silicon Macs via Rosetta 2
147
+ - **Apple Silicon build**: Native arm64 performance on Apple Silicon Macs
148
+ - **Recommendation**: Use Apple Silicon build for M1/M2/M3 Macs for best performance
149
+
150
+ **Why different OS runners?**
151
+ PyInstaller creates native executables and requires the target operating system to build properly. Cross-compilation is not supported.
152
+
153
+ ## 🐛 Troubleshooting
154
+
155
+ ### Build Issues
156
+
157
+ **"uv not found"**
158
+ - Install uv following the prerequisites
159
+
160
+ **"vibesurf.spec not found"**
161
+ - Ensure you're in the project root directory
162
+
163
+ **"Import errors during build"**
164
+ - Check that all dependencies are correctly installed
165
+ - Verify the `hiddenimports` list in `vibesurf.spec`
166
+
167
+ ### Runtime Issues
168
+
169
+ **"Extension not found"**
170
+ - The executable includes bundled extensions
171
+ - Check the console output for path information
172
+
173
+ **"Port already in use"**
174
+ - VibeSurf automatically finds available ports
175
+ - Check for other running instances
176
+
177
+ **"Browser not detected"**
178
+ - The executable includes the same browser detection as the regular installation
179
+ - Manually specify browser path if needed
180
+
181
+ ## 📊 Performance Comparison
182
+
183
+ | Aspect | Regular Install | Executable |
184
+ |--------|----------------|------------|
185
+ | Installation | Requires Python + pip/uv | Download & run |
186
+ | Startup Time | ~1 second | ~3 seconds |
187
+ | File Size | ~50MB (dependencies) | ~150MB (self-contained) |
188
+ | Updates | `uv pip install -U` | Download new executable |
189
+ | Portability | Requires Python | Fully portable |
190
+
191
+ ## 🔄 Updates
192
+
193
+ To update the executable:
194
+ 1. Download the latest release executable, or
195
+ 2. Rebuild locally with the latest code
196
+
197
+ The executable version matches the PyPI package version.
@@ -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.8'
32
- __version_tuple__ = version_tuple = (0, 1, 8)
31
+ __version__ = version = '0.1.9a0'
32
+ __version_tuple__ = version_tuple = (0, 1, 9, 'a0')
33
33
 
34
- __commit_id__ = commit_id = 'gaa38d8984'
34
+ __commit_id__ = commit_id = 'g55ef49b4f'
@@ -297,8 +297,15 @@ def configure_extension_path() -> str:
297
297
  console.print(f"[green]✅ Using extension from environment: {env_extension}[/green]")
298
298
  return env_extension
299
299
 
300
- # Default to chrome_extension in parent directory of this file
301
- default_extension = Path(__file__).parent / "chrome_extension"
300
+ # Check if running in PyInstaller frozen environment
301
+ if getattr(sys, 'frozen', False):
302
+ # PyInstaller frozen environment
303
+ bundle_dir = Path(sys._MEIPASS)
304
+ default_extension = bundle_dir / "vibe_surf" / "chrome_extension"
305
+ console.print(f"[cyan]📦 Detected packaged environment, using bundled extension[/cyan]")
306
+ else:
307
+ # Development environment
308
+ default_extension = Path(__file__).parent / "chrome_extension"
302
309
 
303
310
  if default_extension.exists():
304
311
  extension_path = str(default_extension.resolve())
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vibesurf
3
- Version: 0.1.8
3
+ Version: 0.1.9a0
4
4
  Summary: VibeSurf: A powerful browser assistant for vibe surfing
5
5
  Author: Shao Warm
6
6
  License: Apache-2.0
@@ -4,7 +4,10 @@
4
4
  LICENSE
5
5
  MANIFEST.in
6
6
  README.md
7
+ build-local.bat
8
+ build-local.sh
7
9
  pyproject.toml
10
+ vibesurf.spec
8
11
  ./vibe_surf/__init__.py
9
12
  ./vibe_surf/_version.py
10
13
  ./vibe_surf/cli.py
@@ -70,6 +73,7 @@ pyproject.toml
70
73
  ./vibe_surf/llm/__init__.py
71
74
  ./vibe_surf/llm/openai_compatible.py
72
75
  .github/workflows/publish.yml
76
+ docs/EXECUTABLE_BUILD.md
73
77
  docs/PYPI_SETUP.md
74
78
  tests/test_agents.py
75
79
  tests/test_backend_api.py
@@ -0,0 +1,145 @@
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
+ )
@@ -1,98 +0,0 @@
1
- name: Publish to PyPI
2
-
3
- on:
4
- release:
5
- types: [published, edited]
6
- workflow_dispatch: # Allow manual trigger
7
-
8
- jobs:
9
- test:
10
- runs-on: ubuntu-latest
11
- strategy:
12
- matrix:
13
- python-version: ['3.11', '3.12']
14
-
15
- steps:
16
- - uses: actions/checkout@v4
17
- with:
18
- ref: 'main' # Always checkout main branch for latest code
19
- fetch-depth: 0 # Full history for setuptools-scm
20
-
21
- - name: Set up Python ${{ matrix.python-version }}
22
- uses: actions/setup-python@v5
23
- with:
24
- python-version: ${{ matrix.python-version }}
25
-
26
- - name: Install dependencies
27
- run: |
28
- python -m pip install --upgrade pip
29
- pip install build pytest
30
- pip install -e .
31
-
32
- - name: Test CLI import
33
- run: |
34
- python -c "import vibe_surf; print(f'VibeSurf version: {vibe_surf.__version__}')"
35
- python -c "from vibe_surf.cli import main; print('CLI import successful')"
36
-
37
- build:
38
- needs: test
39
- runs-on: ubuntu-latest
40
-
41
- steps:
42
- - uses: actions/checkout@v4
43
- with:
44
- ref: 'main' # Always checkout main branch for latest code
45
- fetch-depth: 0 # Full history for setuptools-scm
46
-
47
- - name: Set up Python
48
- uses: actions/setup-python@v5
49
- with:
50
- python-version: '3.11'
51
-
52
- - name: Install build dependencies
53
- run: |
54
- python -m pip install --upgrade pip
55
- pip install build setuptools-scm[toml]
56
-
57
- - name: Build package
58
- run: python -m build
59
-
60
- - name: Check built package
61
- run: |
62
- pip install twine
63
- twine check dist/*
64
-
65
- # Show package contents
66
- echo "=== Built packages ==="
67
- ls -la dist/
68
-
69
- echo "=== Package info ==="
70
- python -m pip install dist/*.whl
71
- python -c "import vibe_surf; print(f'Installed version: {vibe_surf.__version__}')"
72
-
73
- - name: Upload build artifacts
74
- uses: actions/upload-artifact@v4
75
- with:
76
- name: dist
77
- path: dist/
78
-
79
- publish:
80
- needs: [test, build]
81
- runs-on: ubuntu-latest
82
- environment: release
83
- permissions:
84
- id-token: write # Required for trusted publishing
85
-
86
- steps:
87
- - name: Download build artifacts
88
- uses: actions/download-artifact@v4
89
- with:
90
- name: dist
91
- path: dist/
92
-
93
- - name: Publish to PyPI
94
- uses: pypa/gh-action-pypi-publish@release/v1
95
- with:
96
- password: ${{ secrets.PYPI_API_TOKEN }}
97
- # Use the following line if you want to use trusted publishing instead
98
- # skip-existing: true
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes