mirror of
https://github.com/samsonjs/vibetunnel.git
synced 2026-03-25 09:25:50 +00:00
202 lines
No EOL
7.2 KiB
Markdown
202 lines
No EOL
7.2 KiB
Markdown
# Architecture Overview
|
|
|
|
## System Design
|
|
|
|
VibeTunnel consists of three main components working together:
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────┐
|
|
│ macOS Menu Bar Application │
|
|
│ (Swift/SwiftUI) │
|
|
│ ┌──────────────────────────────────────────────┐ │
|
|
│ │ ServerManager: Lifecycle & process control │ │
|
|
│ │ SessionMonitor: Active session tracking │ │
|
|
│ │ TTYForwardManager: Terminal forwarding │ │
|
|
│ └──────────────────────────────────────────────┘ │
|
|
└────────────────────┬────────────────────────────────┘
|
|
│ Spawns & Manages
|
|
┌────────────────────▼────────────────────────────────┐
|
|
│ Node.js/Bun Server Process │
|
|
│ (TypeScript) │
|
|
│ ┌──────────────────────────────────────────────┐ │
|
|
│ │ HTTP Server: REST API endpoints │ │
|
|
│ │ WebSocket Server: Real-time terminal I/O │ │
|
|
│ │ PTY Manager: Native terminal processes │ │
|
|
│ │ Session Manager: Lifecycle & state │ │
|
|
│ └──────────────────────────────────────────────┘ │
|
|
└────────────────────┬────────────────────────────────┘
|
|
│ HTTP/WebSocket
|
|
┌────────────────────▼────────────────────────────────┐
|
|
│ Client Applications │
|
|
├──────────────────────────────────────────────────────┤
|
|
│ Web Browser │ iOS App │
|
|
│ (Lit/TypeScript) │ (Swift/SwiftUI) │
|
|
└──────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
## Component Responsibilities
|
|
|
|
### macOS Application
|
|
|
|
| Component | File | Purpose |
|
|
|-----------|------|---------|
|
|
| ServerManager | `mac/VibeTunnel/ServerManager.swift` | Server lifecycle, port management |
|
|
| SessionMonitor | `mac/VibeTunnel/SessionMonitor.swift` | Track active sessions |
|
|
| TTYForwardManager | `mac/VibeTunnel/TTYForwardManager.swift` | CLI integration |
|
|
| MenuBarUI | `mac/VibeTunnel/MenuBarView.swift` | User interface |
|
|
|
|
### Server Process
|
|
|
|
| Component | File | Purpose |
|
|
|-----------|------|---------|
|
|
| HTTP Server | `web/src/server/server.ts` | REST API, WebSocket upgrade |
|
|
| PTY Manager | `web/src/server/pty/pty-manager.ts` | Terminal process spawning |
|
|
| Session Manager | `web/src/server/services/session-manager.ts` | Session state & cleanup |
|
|
| Buffer Aggregator | `web/src/server/services/buffer-aggregator.ts` | Output optimization |
|
|
|
|
### Web Frontend
|
|
|
|
| Component | File | Purpose |
|
|
|-----------|------|---------|
|
|
| App Shell | `web/src/client/app.ts` | Main application container |
|
|
| Terminal View | `web/src/client/terminal-view.ts` | xterm.js integration |
|
|
| Session List | `web/src/client/session-list.ts` | Active sessions UI |
|
|
| WebSocket Client | `web/src/client/services/websocket.ts` | Real-time communication |
|
|
|
|
## Data Flow
|
|
|
|
### Session Creation
|
|
```
|
|
User → vt command → TTYForwardManager → HTTP POST /api/sessions
|
|
→ Server creates PTY → Returns session ID → Opens browser
|
|
→ WebSocket connection established → Terminal ready
|
|
```
|
|
|
|
### Terminal I/O
|
|
```
|
|
User types → WebSocket message → Server PTY write
|
|
PTY output → Buffer aggregation → Binary protocol → WebSocket
|
|
→ Client decode → xterm.js render
|
|
```
|
|
|
|
### Session Cleanup
|
|
```
|
|
Terminal exit → PTY close → Session manager cleanup
|
|
→ WebSocket close → Client notification → UI update
|
|
```
|
|
|
|
## Communication Protocols
|
|
|
|
### HTTP REST API
|
|
- Session CRUD operations
|
|
- Authentication endpoints
|
|
- Health checks
|
|
- See [API Reference](api-reference.md)
|
|
|
|
### WebSocket Protocol
|
|
- Binary buffer format for efficiency
|
|
- Magic byte `0xBF` for packet identification
|
|
- 4-byte length header (big-endian)
|
|
- UTF-8 encoded terminal data
|
|
- See [Protocol Details](protocols.md)
|
|
|
|
### Inter-Process Communication
|
|
- Mac app spawns Bun server as child process
|
|
- Environment variables for configuration
|
|
- File-based PID tracking
|
|
- Signal handling for graceful shutdown
|
|
|
|
## Security Architecture
|
|
|
|
### Authentication Flow
|
|
```
|
|
Client → Password (optional) → Server validates
|
|
→ JWT token generated → Token in Authorization header
|
|
→ Server validates on each request
|
|
```
|
|
|
|
### Network Security
|
|
- Localhost-only by default
|
|
- Optional LAN exposure with authentication
|
|
- Tailscale/ngrok integration for remote access
|
|
- WSS/HTTPS in production
|
|
|
|
### Process Isolation
|
|
- Each session runs in separate PTY process
|
|
- User permissions inherited from server
|
|
- No privilege escalation
|
|
- Resource limits per session
|
|
|
|
## Performance Optimizations
|
|
|
|
### Buffer Aggregation
|
|
- Batch terminal output every 16ms
|
|
- Reduce WebSocket message frequency
|
|
- Binary protocol reduces payload size
|
|
|
|
### Connection Management
|
|
- WebSocket connection pooling
|
|
- Automatic reconnection with backoff
|
|
- Ping/pong for keep-alive
|
|
|
|
### Resource Management
|
|
- Lazy loading of terminal sessions
|
|
- Automatic cleanup of idle sessions
|
|
- Memory-mapped session recordings
|
|
|
|
## Platform Integration
|
|
|
|
### macOS Features
|
|
- Menu bar application
|
|
- Sparkle auto-updates
|
|
- Code signing & notarization
|
|
- Launch at login
|
|
|
|
### iOS Features
|
|
- Native Swift UI
|
|
- Background session support
|
|
- Push notifications
|
|
- Handoff support
|
|
|
|
### Web Standards
|
|
- Progressive Web App capable
|
|
- Service Worker for offline
|
|
- WebAssembly for performance
|
|
- Responsive design
|
|
|
|
## Build & Deployment
|
|
|
|
### Build Pipeline
|
|
```
|
|
1. TypeScript compilation → JavaScript bundle
|
|
2. Bun standalone executable generation
|
|
3. Swift compilation → macOS app
|
|
4. Embed server in app bundle
|
|
5. Code sign & notarize
|
|
6. DMG creation with Sparkle
|
|
```
|
|
|
|
### Configuration
|
|
- Runtime: Environment variables
|
|
- Build-time: xcconfig files
|
|
- User preferences: macOS defaults system
|
|
- Server config: JSON files
|
|
|
|
## Monitoring & Debugging
|
|
|
|
### Logging
|
|
- Unified logging to macOS Console
|
|
- Structured JSON logs from server
|
|
- Session-specific log filtering
|
|
- See `./scripts/vtlog.sh`
|
|
|
|
### Metrics
|
|
- Session count & duration
|
|
- Message throughput
|
|
- Error rates
|
|
- Resource usage
|
|
|
|
## See Also
|
|
- [Development Guide](../guides/development.md)
|
|
- [API Reference](api-reference.md)
|
|
- [Security Model](../features/authentication.md) |