- Increase indicator size from 6px to 10px for better visibility
- Increase spinner border from 1.5px to 2px
- Add transparent top border for cleaner spinner animation
- Move unread indicator from right to left of session name in tabs
- Add yellow spinning indicator when output is actively coming in
- Spinner automatically transitions to blue dot after 1s of idle
- Activity indicator properly preserves unread status
- Fix unread indicator to only trigger when Claude finishes responding (using `>\r\n` pattern instead of timer-based detection)
- Separate terminal ready detection logic for shell initialization vs Claude interactive session completion
- Add terminal-utils.ts with `isTerminalReady()` (shell) and `isClaudeSessionReady()` (Claude interactive)
- Update renderer.ts to use `isClaudeSessionReady()` and remove timer-based detection logic
Update regex patterns to recognize SSE servers (case-insensitive) with failed connection status (✗).
Previously only matched successful (✓) or warning (⚠) states, causing failed SSE connections to be ignored.
- Spawn a single persistent PTY at app startup for running claude commands
- Replaces execAsync with login shell to avoid PATH issues with NVM
- PTY has full interactive shell environment with proper PATH
- Commands execute instantly (no shell spawn overhead)
- Fixes "command not found: claude" in compiled DMG
- Detects command completion using isTerminalReady helper
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add refreshMcpServers() helper to force immediate list refresh
- Shows loading spinner on add button during refresh
- Waits 500ms for poller to process and return results
- Both add and remove operations now trigger forced refresh
- Ensures UI updates immediately after server changes
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Shows loading-spinner animation alongside "Adding..." text
while waiting for MCP server addition to complete.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Since MCP commands now run in independent login shells via execAsync,
the sessionId parameter is no longer needed.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Replaces PTY-based execution to avoid race conditions with MCP poller
- Uses process.env.SHELL to detect user's preferred shell
- Falls back to /bin/zsh on macOS, /bin/bash on Linux
- Executes in login shell (-l) to ensure PATH is set correctly
- Each command runs in independent shell process (no interference)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fixes issue where execAsync spawns non-login shell without claude in PATH
- All MCP operations now run in the session's MCP poller PTY
- Adds executeInMcpPoller helper to run commands and wait for completion
- Uses prompt detection to know when command finishes
- 10 second timeout for safety
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Shows the worktree directory path below each session name in the sidebar with subtle gray text to help users identify where each session's files are located.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Users can now configure where worktrees are stored via the settings modal. The setting is persisted and applies to all new sessions created after the change.
Changes:
- Added worktreeDir field to TerminalSettings interface
- Added UI controls in settings modal for selecting worktree directory
- Updated worktree creation logic to use configured directory
- Defaults to ~/worktrees for backward compatibility
- Worktrees now use project basename: ~/worktrees/FleetCode/session1
- Adds collision detection with .fleetcode-project marker file
- If collision detected, appends short hash: FleetCode-a3b2c1
- MCP config moved to ~/worktrees/ProjectName/mcp-config.json
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Worktrees now live in ~/worktrees/<project-hash>/<session-name>
- MCP config files also moved to ~/worktrees
- Removed ensureFleetcodeExcluded function (no longer needed)
- Uses MD5 hash of project directory to organize worktrees by project
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
When a session is deleted and there are no remaining active sessions,
hide the MCP servers section to match the behavior of closeSession.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Update MCP server regex to handle HTTP type servers in addition to SSE and stdio
- Extract terminal readiness detection into reusable isTerminalReady() helper function with configurable start position
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added min-width: 0 to session-name-container to allow flex children to shrink below their content size, enabling proper text truncation when session names are long.
- Replaced deprecated xterm-addon-fit with modern @xterm/addon-fit package
- Updated import statement to use scoped package name
- No functional changes, just using the newer maintained package
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Users can now specify a custom branch name when creating a session. If provided, the custom name is used as both the git branch name and the session display name.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Send mcp-polling-started event from main process before each poll
- Show spinner on add button when polling starts
- Restore + button when mcp-servers-updated event received
- Spinner shows on initial load and every 60s refresh
- Extract MCP servers from ~/.claude.json for each project
- Write project MCP config to .fleetcode/mcp-config-<hash>.json
- Pass --mcp-config flag to Claude CLI on session start
- Update MCP poller to run in project directory instead of worktree
- Reduce first poll delay from 2s to 500ms for faster UI updates
- Add unique UUID suffix to git branch names to prevent conflicts
- Store mcpConfigPath in persisted sessions