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.
- vibesurf-0.1.9a0/.github/workflows/publish.yml +230 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/.gitignore +2 -1
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/PKG-INFO +1 -1
- vibesurf-0.1.9a0/build-local.bat +120 -0
- vibesurf-0.1.9a0/build-local.sh +124 -0
- vibesurf-0.1.9a0/docs/EXECUTABLE_BUILD.md +197 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/_version.py +3 -3
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/cli.py +9 -2
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibesurf.egg-info/PKG-INFO +1 -1
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibesurf.egg-info/SOURCES.txt +4 -0
- vibesurf-0.1.9a0/vibesurf.spec +145 -0
- vibesurf-0.1.8/.github/workflows/publish.yml +0 -98
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/.env.example +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/.python-version +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/LICENSE +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/MANIFEST.in +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/README.md +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/docs/PYPI_SETUP.md +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/pyproject.toml +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/setup.cfg +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/tests/test_agents.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/tests/test_backend_api.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/tests/test_browser.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/tests/test_controller.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/__init__.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/agents/__init__.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/agents/browser_use_agent.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/agents/prompts/__init__.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/agents/prompts/vibe_surf_prompt.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/agents/report_writer_agent.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/agents/vibe_surf_agent.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/__init__.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/api/__init__.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/api/activity.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/api/config.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/api/files.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/api/models.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/api/task.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/database/__init__.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/database/manager.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/database/models.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/database/queries.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/database/schemas.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/llm_config.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/main.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/migrations/__init__.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/migrations/init_db.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/migrations/seed_data.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/shared_state.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/utils/__init__.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/utils/encryption.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/backend/utils/llm_factory.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/browser/__init__.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/browser/agen_browser_profile.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/browser/agent_browser_session.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/browser/browser_manager.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/browser/utils.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/browser/watchdogs/__init__.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/browser/watchdogs/action_watchdog.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/browser/watchdogs/dom_watchdog.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/background.js +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/config.js +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/content.js +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/dev-reload.js +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/icons/convert-svg.js +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/icons/logo-preview.html +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/icons/logo.png +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/manifest.json +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/popup.html +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/scripts/api-client.js +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/scripts/main.js +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/scripts/markdown-it.min.js +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/scripts/session-manager.js +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/scripts/ui-manager.js +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/sidepanel.html +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/styles/animations.css +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/styles/components.css +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/styles/main.css +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/chrome_extension/styles/settings.css +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/controller/__init__.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/controller/file_system.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/controller/mcp_client.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/controller/vibesurf_tools.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/controller/views.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/llm/__init__.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibe_surf/llm/openai_compatible.py +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibesurf.egg-info/dependency_links.txt +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibesurf.egg-info/entry_points.txt +0 -0
- {vibesurf-0.1.8 → vibesurf-0.1.9a0}/vibesurf.egg-info/requires.txt +0 -0
- {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
|
|
@@ -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.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 1,
|
|
31
|
+
__version__ = version = '0.1.9a0'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 1, 9, 'a0')
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
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
|
-
#
|
|
301
|
-
|
|
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())
|
|
@@ -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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|