mirror of
https://github.com/samsonjs/vibetunnel.git
synced 2026-03-26 09:35:52 +00:00
* fix: optimize Go server CPU usage from 500%+ to efficient levels Major performance improvements to resolve excessive CPU consumption: **Critical Fixes:** - Remove WebSocket busy loop that caused continuous CPU spinning - Fix microsecond-level polling (100μs → 10ms) reducing 100x operations - Replace ps subprocess calls with efficient kill(pid,0) syscalls - Increase timer intervals (1s → 30s) for session status checks **Optimizations:** - Control FIFO polling: 100ms → 1s intervals - Select timeout: 100ms → 1s to reduce unnecessary wakeups - Smart status caching: skip checks for already-exited sessions - Remove unused imports (os/exec, strconv) **Impact:** - Eliminates tight loops causing 10,000+ operations per second - Reduces subprocess overhead from frequent ps command executions - Changes from polling-based to efficient event-driven architecture - Expected CPU usage reduction from 500%+ to levels comparable with Node.js version 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * fix: prevent WebSocket channel close panic with sync.Once - Add sync.Once to prevent double-closing of done channel - Update handleTextMessage signature to accept close function - Use closeOnceFunc for safe channel closure across goroutines Fixes panic: 'close of closed channel' in WebSocket handler * feat: add --do-not-allow-column-set flag to disable resizing for spawned sessions **New Flag:** - `--do-not-allow-column-set` (default: true) - Disables terminal resizing for spawned shells - Only affects sessions created with `spawn_terminal=true` - Detached sessions (command-line, API without spawn) always allow resizing **Implementation:** - Add `IsSpawned` field to session.Config and session.Info structs - Track whether session was spawned in terminal vs detached - Server checks flag + spawn status before allowing resize operations - Returns descriptive error for blocked resize attempts **Behavior:** - Spawned sessions: Resize blocked when flag enabled (default) - Detached sessions: Always allow resizing regardless of flag - Existing sessions preserve their resize capabilities **API Response for blocked resize:** ```json { "success": false, "message": "Resizing is disabled for spawned sessions", "error": "resize_disabled_for_spawned_sessions" } ``` 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * feat: extend --do-not-allow-column-set flag to block ALL session resizing **Breaking Change:** Flag now affects both spawned AND detached sessions **Changes:** - Remove `sess.IsSpawned()` check in resize handler - Block resizing for ALL sessions when flag is enabled (default: true) - Update flag description: "Disable terminal resizing for all sessions (spawned and detached)" - Update error message: "Terminal resizing is disabled by server configuration" - Update error code: "resize_disabled_by_server" **New Behavior:** - `--do-not-allow-column-set=true` (default): NO resizing for any session type - `--do-not-allow-column-set=false`: Allow resizing for all session types - Applies uniformly to both spawned terminal windows and detached CLI sessions **API Response for blocked resize:** ```json { "success": false, "message": "Terminal resizing is disabled by server configuration", "error": "resize_disabled_by_server" } ``` 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| control.go | ||
| manager.go | ||
| pty.go | ||
| select.go | ||
| session.go | ||
| util.go | ||