a3e6f6415f
Consolidates everything the desktop app depends on into app-desktop/ so it packages cleanly as a standalone Windows exe: - app-desktop-macos/ -> app-desktop/src/ (drop macOS-only naming, app now targets Windows via PyInstaller too) - remote-server/ws_server.py and app-presets/ moved into app-desktop/src/ (both were exclusive dependencies of main.py/presets.py) — fixes a PyInstaller "missing module" error for ws_server that only surfaced once packaging was attempted, since its old location wasn't on the analyzer's search path - .venv relocated into app-desktop/src/ alongside the code it serves - run.py moved into src/, path logic simplified now that it's co-located with main.py instead of bridging from the repo root - Deleted app/, server/ — stale __pycache__-only fossils from prior reorgs - .gitignore: added missing .venv/ entry (was only covering venv/, a different name — the real folder was never actually ignored) and app-desktop/build|dist/ for PyInstaller output presets.py: added a frozen-vs-source branch. Running from source is unchanged (app-presets/ next to the code). A packaged exe can't write to Program Files, so it uses %APPDATA%\VirtualController\ instead — standard Windows convention. First launch on a machine with no AppData presets yet seeds from presets.json bundled into the exe (PyInstaller --add-data, baked into VirtualController.spec), so a fresh install starts with real presets instead of empty; every launch after that only touches AppData. Verified: exe builds clean (no missing-module warnings), launches with a real window, and a clean first-launch correctly seeds AppData from the bundled presets. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
49 lines
3.6 KiB
JSON
49 lines
3.6 KiB
JSON
{
|
|
"permissions": {
|
|
"allow": [
|
|
"Bash(git add *)",
|
|
"Bash(python3 -c \"import ast; ast.parse\\(open\\('main.py'\\).read\\(\\)\\)\")",
|
|
"WebFetch(domain:raw.githubusercontent.com)",
|
|
"WebSearch",
|
|
"Bash(find /private/tmp/claude-502/-Users-p4piwabl0-Desktop-projects-virtual-controller-clean/29ede664-3f90-4b9a-a462-57bbd9febfef/scratchpad/helgobox -maxdepth 1 -iname target -o -maxdepth 1 -iname *.gitmodules)",
|
|
"Bash(SRC=/private/tmp/claude-502/-Users-p4piwabl0-Desktop-projects-virtual-controller-clean/29ede664-3f90-4b9a-a462-57bbd9febfef/scratchpad/helgobox *)",
|
|
"Bash(find /Users/p4piwabl0/Desktop/projects/virtual-controller-clean/plugin-reaper-realearn -iname .env -not -iname *.example)",
|
|
"Bash(git commit -m ' *)",
|
|
"Bash(git push *)",
|
|
"Bash(git mv *)",
|
|
"Bash(awk '{print $NF}')",
|
|
"Bash(python3 -c ' *)",
|
|
"Bash(timeout 6 python3 run.py)",
|
|
"Bash(echo \"EXIT: $?\")",
|
|
"Bash(cargo --version)",
|
|
"Bash(xcode-select -p)",
|
|
"Bash(brew --version)",
|
|
"Bash(rustc --version)",
|
|
"Read(//Users/p4piwabl0/Library/Application Support/REAPER/UserPlugins/**)",
|
|
"Bash(/Users/p4piwabl0/.cargo/bin/rustup show *)",
|
|
"Bash(/Users/p4piwabl0/.cargo/bin/rustup toolchain *)",
|
|
"Bash(curl -sL https://raw.githubusercontent.com/justinfrankel/reaper-sdk/main/sdk/reaper_plugin.h -o /private/tmp/claude-502/-Users-p4piwabl0-Desktop-projects-virtual-controller-clean/96f4c045-8fa6-4b1e-add2-8903d8ee2feb/scratchpad/reaper_plugin.h --write-out \"HTTP:%{http_code} SIZE:%{size_download}\\\\n\")",
|
|
"Bash(curl -sL https://raw.githubusercontent.com/justinfrankel/reaper-sdk/main/sdk/reaper_plugin_functions.h -o /private/tmp/claude-502/-Users-p4piwabl0-Desktop-projects-virtual-controller-clean/96f4c045-8fa6-4b1e-add2-8903d8ee2feb/scratchpad/reaper_plugin_functions.h --write-out \"HTTP:%{http_code} SIZE:%{size_download}\\\\n\")",
|
|
"Bash(grep -i \"^swell.h\\\\|swell\\\\.h$\")",
|
|
"Bash(set -e)",
|
|
"Bash(mkdir -p extension-reaper-macos/vendor/reaper-sdk/sdk)",
|
|
"Bash(mkdir -p extension-reaper-macos/vendor/reaper-sdk/WDL)",
|
|
"Bash(mkdir -p extension-reaper-macos/src)",
|
|
"Bash(cp __TRACKED_VAR__/reaper-sdk/sdk/reaper_plugin.h __TRACKED_VAR__/reaper-sdk/sdk/reaper_plugin_functions.h __TRACKED_VAR__/reaper-sdk/sdk/reaper_plugin_fx_embed.h __TRACKED_VAR__/reaper-sdk/sdk/LICENSE extension-reaper-macos/vendor/reaper-sdk/sdk/)",
|
|
"Bash(chmod +x build.sh)",
|
|
"Bash(./build.sh)",
|
|
"Bash(nm -gU reaper_extension-reaper-macos.dylib)",
|
|
"Bash(ls \"$HOME/Library/Application Support/REAPER/UserPlugins\" | grep -i reaper_ | head -5)",
|
|
"Bash(ls -la \"$HOME/Library/Application Support/REAPER/UserPlugins\")",
|
|
"Bash(cp reaper_extension-reaper-macos.dylib '/Users/p4piwabl0/Library/Application Support/REAPER/UserPlugins/')",
|
|
"Bash(tar --exclude='*.dylib' -czf ~/Desktop/extension-reaper-macos-skeleton-backup-2026-07-15.tar.gz extension-reaper-macos)",
|
|
"Read(//Users/p4piwabl0/Desktop/**)",
|
|
"Bash(awk '/int REAPERAPI_LoadAPI/,0' /Users/p4piwabl0/Desktop/projects/virtual-controller-clean/extension-reaper-macos/vendor/reaper-sdk/sdk/reaper_plugin_functions.h)",
|
|
"Bash(grep -n \"{NULL, NULL}\")",
|
|
"Bash(ls -la \"/Applications/REAPER.app/Contents/MacOS/\" 2>&1 | head -5 *)",
|
|
"Read(//Applications/REAPER.app/Contents/MacOS/**)",
|
|
"Bash(src/.venv/Scripts/python.exe -m PyInstaller --name VirtualController --onedir --windowed --distpath dist --workpath build --specpath . --add-data \"src/app-presets/presets.json;app-presets\" src/main.py)"
|
|
]
|
|
}
|
|
}
|