Commit graph

112 commits

Author SHA1 Message Date
Mario Zechner
aae68479ee Improve mobile terminal input with virtual keyboard support
- Move controls above virtual keyboard using Visual Viewport API
- Dynamically adjust textarea height when keyboard appears/disappears
- Add smooth transitions for keyboard show/hide
- Prevent textarea from stretching behind buttons
- Clean up event listeners properly

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 07:36:58 +02:00
Peter Steinberger
975705ae80 Remove control directory creation logic from TunnelServer
The tty-fwd binary should handle its own directory requirements. This removes:
- ensureControlDirectoryExists() function
- All calls to ensure control directory exists during startup and API calls
- Directory writability checks

The control directory path is still passed to tty-fwd, but VibeTunnel no longer manages its creation.
2025-06-16 07:36:30 +02:00
Peter Steinberger
63d02b4ed6 Update CI workflow to use Xcode 16.2 2025-06-16 07:22:26 +02:00
Armin Ronacher
cf3069381e Fixed build on my machine 2025-06-16 07:21:02 +02:00
Mario Zechner
a77b1dbe26 Implement auto-switch to session view after creation and clean startup
- Add automatic session view switching after creating new sessions
- Poll for session to appear in list and switch immediately when found
- Handle tty-fwd ID mismatch by falling back to newest session
- Add comprehensive debugging for session creation flow
- Clean control directory contents on server startup for fresh state
- Improve session creation UX with seamless transition to interactive view

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 07:19:35 +02:00
Peter Steinberger
060f25dbe7 Fix tty-fwd SIGKILL issue by adding entitlements and signing script
- Add entitlements to allow spawning executables with different signatures
- Create build script to properly sign tty-fwd binary during builds
- Add error logging for better debugging of process termination
- Validate control directory permissions before use
2025-06-16 07:19:03 +02:00
Peter Steinberger
79a23c0aa6 Replace PATH hack with proper zsh configuration loading in Xcode build script
- Changed build script shell from /bin/sh to /bin/zsh for better compatibility
- Sources user's .zshrc or .zprofile to get the actual PATH configuration
- Properly handles all Node.js installation methods (nvm, homebrew, fnm, etc.)
- Added PATH debugging output to help troubleshoot issues
- Maintains fallback for systems without zsh configuration files

Also includes:
- Added PATH environment fix for ngrok detection in NgrokService
- Implemented proper update channel support in SparkleUpdaterManager using delegate methods
- Fixed session name placeholder text in web frontend
2025-06-16 07:15:53 +02:00
Mario Zechner
2fa36dd15b Move CREATE SESSION button to header and improve UI layout
- Move CREATE SESSION button from session list to app header for better visibility
- Hide CLEAN EXITED button when "hide exited" is checked (only show when needed)
- Simplify session list controls layout with clean flex design
- Add proper state management for create modal between app and session list
- Maintain hide exited state when navigating between views
- Fix checkbox blocking issue with better event timing

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 07:13:45 +02:00
Peter Steinberger
334d4d741e Improve tty-fwd error messages and ensure control directory exists
- Added detailed error messages for common exit codes (SIGKILL, command not found, etc.)
- Create control directory (~/.vibetunnel/control) if it doesn't exist
- Trim whitespace from error output for cleaner messages
- Specifically handle exit code 9 (SIGKILL) which occurs when control directory is missing
- Ensure directory exists in both listSessions() and createSession()
2025-06-16 07:06:30 +02:00
Peter Steinberger
74373a129d Fix TypeScript error in server.ts
- Handle error type properly in catch block
- Check if error is instanceof Error before accessing message property
- Provide fallback for unknown error types
2025-06-16 06:59:11 +02:00
Armin Ronacher
14321ccbb5 Add --claude and --claude-yolo 2025-06-16 06:55:04 +02:00
Peter Steinberger
91f12f6ed6 Add Xcode build phase for web frontend
- Added "Build Web Frontend" phase that runs npm install and npm run build
- Copies built web assets from web/public/ to app Resources folder
- Modified TunnelServer.swift to only serve static files from bundled Resources
- Removed development path options from static file serving
- Added proper PATH configuration for npm in build script
2025-06-16 06:54:04 +02:00
Mario Zechner
3a6665c13f Fix session status detection and prevent stream restarts for exited sessions
- Add session status polling in session view to detect when sessions end
- Switch from live stream to static snapshot for exited sessions
- Fix session list player creation for toggled visibility states
- Use requestAnimationFrame for better DOM timing instead of setTimeout
- Rename checkbox label from "--filter-exited" to "hide exited"
- Implement smart kill/clean button behavior based on session status
- Remove all focus outlines from session view interface

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 06:43:27 +02:00
Peter Steinberger
05b3be6569 disable user script sandbox 2025-06-16 06:41:10 +02:00
Peter Steinberger
d4c5f22fad Improve UI styling in Advanced Settings
- Increase General tab height by 50px to 450px for better spacing
- Style server port field with rounded border and centered text
- Center the Tailscale recommendation footer text
2025-06-16 06:40:08 +02:00
Peter Steinberger
6cbe2b8cbb Fix Xcode build phase permissions and increase General tab height
- Add tty-fwd-universal to inputPaths to fix "Operation not permitted" error
- Set alwaysOutOfDate flag to ensure build phase runs when needed
- Increase General settings tab height from 300 to 400 pixels
- Fix ngrok alert handling to use SwiftUI alerts instead of NSAlert
2025-06-16 06:35:04 +02:00
Armin Ronacher
347d79914f Fix cargo build for some macs 2025-06-16 06:23:23 +02:00
Peter Steinberger
6c0b8cb7b3 Prevent update dialogs on app startup in debug mode
- Set startingUpdater to false in DEBUG builds to prevent automatic initialization
- Keep all automatic update checks and downloads disabled in DEBUG mode
- Only start the updater manually in release builds if needed
- This ensures no update-related dialogs appear during development
2025-06-16 06:11:34 +02:00
Peter Steinberger
d4fae5631a Improve ngrok authentication UX and move update settings
- Show alert dialog when attempting to enable ngrok without auth token
- Move update channel and check for updates from Advanced to General settings
- Place update controls under Application section for better accessibility
- Add AppKit import for NSAlert functionality
2025-06-16 06:07:03 +02:00
Armin Ronacher
e8fb468a19 Implement half broken SSE 2025-06-16 06:04:03 +02:00
Mario Zechner
e27657a9fe WIP: Interactive session view needs refinement
- Basic routing and keyboard handling implemented
- Terminal display and input sending functional
- Still needs polish and bug fixes before fully working

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 05:54:15 +02:00
Peter Steinberger
70a8da5235 feat: enhance UI and automatic update handling
- Fix session count display to show on single line in menu bar
- Add conditional compilation to disable automatic updates in DEBUG mode
- Add "Open Dashboard" menu item that opens internal server URL
- Convert Help menu from popover to native macOS submenu style
- Enable automatic update downloads in Sparkle configuration
- Increase Advanced Settings tab height from 400 to 500 pixels
- Add Tailscale recommendation with clickable markdown link
- Fix Sendable protocol conformance issues throughout codebase
- Add ApplicationMover utility for app installation location management

These changes improve the overall user experience by making the UI more
intuitive and ensuring automatic updates work correctly in production
while being disabled during development.
2025-06-16 05:53:08 +02:00
Mario Zechner
09cc9edb43 Implement interactive session view with keyboard input
- Add session-view.ts component for full-screen terminal interaction
- Implement real-time keyboard input handling for all key types
- Add routing between session list and interactive session view
- Support special keys, Ctrl combinations, and regular text input
- Remove compiled JS files from git tracking (should be build artifacts)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 05:51:27 +02:00
Mario Zechner
ba4a86c5db Improve terminal preview layout for better space utilization
- Change asciinema player fit mode from 'both' to 'width' for horizontal expansion
- Add overflow-hidden to prevent vertical overflow from breaking layout
- Terminal previews now always use full card width

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 05:48:50 +02:00
Peter Steinberger
d80ab6c217 Add ngrok integration for remote access
- Add NgrokService to manage ngrok tunnel lifecycle
- Integrate ngrok with TunnelServer via API endpoints (/api/ngrok/*)
- Add UI controls in Advanced Settings for ngrok configuration
- Store auth tokens securely in macOS Keychain
- Add ServerMonitor to track server status across the app
- Show tunnel status and public URL when active
- Support CLI-based ngrok integration (requires brew install ngrok)

This allows VibeTunnel to be accessed remotely via ngrok tunnels,
fulfilling the "use Claude Code anywhere" promise.
2025-06-16 05:45:51 +02:00
Mario Zechner
64c97832c3 FUUUUU 2025-06-16 05:44:51 +02:00
Armin Ronacher
25293cef7b Added vt command 2025-06-16 05:43:09 +02:00
Mario Zechner
a7dce56757 Fix live streaming for terminal previews with asciinema player
- Configure asciinema player with eventsource driver for SSE support
- Update server stream endpoint to properly format SSE for asciinema
- Session preview cards now display live terminal output

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 05:43:04 +02:00
Peter Steinberger
520cf9641d Add Help menu to menu bar with website and issue links
- Add Help submenu with links to website and GitHub issues
- Include Check for Updates functionality (using Sparkle stub)
- Display app version (0.1.3) in Help menu
- Move About option from main menu to Help submenu
- Update About description to "Turn any browser into your Mac's terminal."
2025-06-16 05:23:56 +02:00
Mario Zechner
9cbda0d4eb Very good commit 2025-06-16 05:11:09 +02:00
Mario Zechner
79509ea251 Simplify UI with clean header and button styling
- Replace complex ASCII header with simple "VibeTunnel" text
- Remove ASCII brackets from buttons: CREATE, CLEAN, CLEAN EXITED, kill
- Add border to header for visual separation

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 05:11:09 +02:00
Armin Ronacher
2bc2c2f3c7 Kill leftover prototype 2025-06-16 05:05:42 +02:00
Mario Zechner
179d0db754 Clean up file naming by removing -new suffixes
- Renamed server-new.ts → server.ts
- Renamed app-new.ts → app.ts
- Renamed app-new-entry.ts → app-entry.ts
- Updated package.json scripts to remove all -new references
- Updated custom element name from vibetunnel-app-new to vibetunnel-app
- Updated index.html to reference cleaned up files
- Added CLAUDE.md with development notes

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 04:55:18 +02:00
Armin Ronacher
19b428a879 Remove unused stuff 2025-06-16 04:52:30 +02:00
Armin Ronacher
482f48052c Hook up cleanup 2025-06-16 04:48:20 +02:00
Peter Steinberger
eb12804a0b Remove Tunnel2 2025-06-16 04:42:22 +02:00
Peter Steinberger
ac4a0df33b Add new icon 2025-06-16 04:42:13 +02:00
Mario Zechner
2eeb996be4 Improve create button styling when disabled
- Added disabled:opacity-50 to make button appear grayed out when disabled
- Added disabled:cursor-not-allowed for better UX when button is disabled
- Added disabled:hover:bg-vs-user to prevent hover effects on disabled button
- Button is disabled when command field is empty or only whitespace

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 04:39:06 +02:00
Armin Ronacher
ce85d70ba6 Changed the path to the control 2025-06-16 04:36:44 +02:00
Mario Zechner
12a9659de1 Optimize cleanup functionality using tty-fwd bulk cleanup
- Discovered that tty-fwd --cleanup (without session ID) cleans all exited sessions
- Added new /api/cleanup-exited endpoint that uses bulk cleanup command
- Updated client to use single API call instead of multiple individual deletions
- Improved performance and reliability for cleaning multiple exited sessions
- Simplified error handling with single bulk operation

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 04:33:46 +02:00
Mario Zechner
6e22984ee8 Add Clean Exited button and improve button row styling
- Added handleCleanExited method to delete all exited sessions in batch
- Added cleaningExited state to track cleaning progress
- Added Clean Exited button with proper styling and disabled state
- Improved button row layout with grouped buttons on left and checkbox on right
- Added transition-colors for smooth hover effects
- Button automatically disables when no exited sessions exist

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 04:31:01 +02:00
Armin Ronacher
5ffc2dca8d Vibed up some stuff for the api 2025-06-16 04:25:46 +02:00
Mario Zechner
ab36c56836 Rebuild client components to make Create Session button visible
Updated compiled JavaScript files to include the latest TypeScript changes
for the Create Session button and modal functionality.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 04:24:59 +02:00
Mario Zechner
a868752e40 Fix Create Session button visibility by removing duplicate form
Removed the duplicate session-create-form component from the main app since
the session list now manages its own modal. Added session-created event
handler to the session-list component.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 04:21:16 +02:00
Mario Zechner
77706ab1f5 Improve session card filtering and new session handling
- Add checkbox filter to hide exited sessions with custom styling
- Limit responsive grid to max 3 columns instead of 4
- Add smart delay for new session snapshots (3 seconds)
- Load existing session snapshots immediately
- Prevent asciinema player errors on new sessions

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 04:14:10 +02:00
Armin Ronacher
8f2219f9f9 We apparently need to ignore some files 2025-06-16 04:09:08 +02:00
Armin Ronacher
d6f7d81155 Checked in ported tunnel server. No idea if it works 2025-06-16 04:09:08 +02:00
Mario Zechner
26d0624333 Add missing components.js to .gitignore
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 04:02:45 +02:00
Mario Zechner
48ce0c6b98 Remove all build artifacts from git tracking
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 04:02:27 +02:00
Mario Zechner
56edbebe4c Fix dev script to use server-new.ts
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-16 04:01:49 +02:00