- Use web/README.md as single source of truth for npm package
- Remove generated README from build-npm.js, now copies from web/
- Fix incorrect --auth parameter (should be --no-auth)
- Add complete CLI options based on actual code parsing
- Remove non-existent --username/--password CLI flags (env vars only)
- Add missing options: --vapid-email, --repository-base-path, etc.
- Clarify installation differences between npm and source
- Add troubleshooting section for npm installation issues
- Keep port as 4020 (our standard port)
Closes#381
The vt script now operates silently by default, removing the
'# Using VibeTunnel from Mac app bundle' debug message that was
printed to stderr. Error messages are still shown when appropriate.
Closes#383
- Add Node.js 20+ badge with logo to show version requirement
- Add Discord badge with member count for community visibility
- Add Homebrew Cask version badge for installation tracking
- Added npm version badge that links to the npm package page
- Added Linux Support badge to highlight cross-platform availability
- Improves visibility of the npm installation option for Linux users
- Added JuxtaCode to the GitApp enum with bundle identifier com.naiveapps.juxtacode
- Set detection priority to 82 (between Sourcetree and Sublime Merge)
- JuxtaCode will now appear in the Git app selection dropdown and be auto-detected when installed
- Created normalize-release-titles.sh script to update existing releases
- Updated all 9 beta releases to use consistent title format
- Modified release.sh to use normalized format for future releases
- Changed from "VibeTunnel 1.0.0-beta.10" to "VibeTunnel 1.0.0 Beta 10"
This makes release titles more readable and consistent across all releases.
- Updated release.md documentation to emphasize per-release changelog behavior
- Added fix-release-changelogs.sh script to update existing releases
- Clarified that release script already extracts only specific version changes
- Script can fix releases that incorrectly show full changelog history
The release system already works correctly - it extracts only the specific
version's changelog. The issue was with some existing releases that somehow
got the full CHANGELOG.md content instead of the extracted version.
- Remove appcast-prerelease-corrected.xml (temporary fix file)
- Remove test-homebrew-fix.sh (Homebrew dependency testing)
- Remove verify-release-build.sh (release build verification)
These scripts were used for debugging #269 and are no longer needed
- Add new Contributing section to README
- Include Discord server invite link for community coordination
- Explain how to get involved and contribute
- Reference existing Contributing Guide for technical details
- Explain that first session Git scanning triggers macOS filesystem permissions
- List common protected folders (Desktop, Documents, Downloads, iCloud Drive)
- Provide workarounds to avoid prompts
- Include link to detailed explanation about macOS privacy-protected folders
- Replace SCShareableContent.current with CGPreflightScreenCaptureAccess for non-triggering permission checks
- Add 5-second cache for permission state to reduce frequent checks
- Add permission guards to WebRTC endpoints (/displays, /processes)
- Only trigger permission dialog on explicit user action (button click)
- Return proper error responses when permission is denied instead of triggering dialog
This fixes the issue where VibeTunnel would repeatedly show the screen recording
permission dialog even after permissions were granted in System Settings.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
The file browser was rendering behind the session create form modal because its z-index (200) was lower than the modal backdrop (1000). Increased FILE_BROWSER z-index to 1100 to ensure proper layering.
Also added debug logging to handleBrowse method for better troubleshooting.
Fixes GitHub issue #326 where VibeTunnel's "Network" access mode was
still binding to localhost instead of 0.0.0.0, preventing access over
Tailscale and other networks.
## Root Cause
Race condition in UserDefaults handling when changing access modes:
- UI updates accessModeString via @AppStorage (writes to UserDefaults)
- restartServerWithNewBindAddress() had redundant bindAddress assignment
- Two concurrent UserDefaults writes to same key could cause stale config
## Changes
**DashboardSettingsView.swift:**
- Remove redundant `serverManager.bindAddress = accessMode.bindAddress`
- @AppStorage already persists the access mode change
- Add detailed logging for access mode changes
**BunServer.swift:**
- Add debug logging for server configuration (port + bindAddress)
- Applies to both production and development servers
- Helps diagnose future binding issues
## Testing
Users can verify the fix by:
1. Change Access Mode in VibeTunnel Settings → Dashboard
2. Check with: `lsof -iTCP:4020 -sTCP:LISTEN`
- Network mode: `TCP *:trap (LISTEN)` (0.0.0.0:4020) ✅
- Localhost mode: `TCP localhost:trap (LISTEN)` (127.0.0.1:4020) ✅
3. View logs: `./scripts/vtlog.sh -s "bind\|configuration"`
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add proper bounds checking in TerminalLauncher.swift when parsing AppleScript results
- Add safe array access in WebRTCManager.swift for SDP line parsing
- Add detailed error logging for debugging parsing failures
- Prevents crashes when activity titles contain multiple words
Fixes parsing errors like "Fixed CI build - added native dependencies"
where AppleScript returns unexpected formats.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>