- Added a step in the release workflow to install libarchive-tools, ensuring necessary dependencies are available for Linux packaging during the CI process.
- Modified the author field in package.json to include an email address for better attribution.
- Improved error handling in SshConnectionManager by providing a clearer exit code message when remote command execution fails.
- Introduced new distribution scripts for macOS targeting ARM64 and x64 architectures.
- Updated README to clarify download instructions for macOS Apple Silicon and Intel users.
- Enhanced CI workflow to support building for both architectures, improving release process.
On Linux, `titleBarStyle: 'hidden'` removes the title bar entirely,
leaving no window controls (close/minimize/maximize). macOS has traffic
lights and Windows has a custom title bar component, but Linux gets
nothing. Fix this by omitting the hidden title bar style on Linux,
which gives native window decorations from the desktop environment
(GNOME, KDE, Hyprland, etc.).
Also adds Linux build support:
- electron-builder `linux` config targeting pacman (.pkg.tar.zst)
- `dist:linux` script for standalone Linux builds
- `release-linux` CI job on ubuntu-latest
- `dist` script updated to include --linux
- Wrapped the cleanup of the temporary directory in a try-finally block to ensure it executes even if an error occurs during the test.
- Added retry logic to the directory removal process to handle potential ENOTEMPTY errors on Windows, enhancing test reliability.
This commit enhances the robustness of the test by ensuring proper cleanup and error handling.
- Updated the ProjectScanner class to utilize a new asynchronous method for resolving file details, improving accuracy in file metadata retrieval.
- Introduced birthtimeMs to session file information, ensuring comprehensive metadata is available for session management.
- Adjusted session creation logic to account for the new birthtimeMs, enhancing the integrity of session timestamps.
- Improved the handling of auto-scroll behavior in ChatHistory and useAutoScrollBottom hook, allowing for smoother user experience during content updates.
This commit enhances the ProjectScanner's efficiency and improves user experience in chat history management.
- Updated the ProjectScanner class to use an asynchronous method for retrieving session filters, ensuring up-to-date session data.
- Introduced a new private method, getSessionFilterForProject, which refreshes composite IDs from disk in local mode to prevent stale entries.
- Enhanced notification listeners to clear existing timers for session and project refreshes, improving performance during rapid file changes.
- Implemented a mechanism to track refresh generations for sessions and projects, preventing stale overwrites during concurrent updates.
This commit improves the accuracy and efficiency of session and project data handling in the application.
- Added a WindowsTitleBar component to provide a conventional title bar experience when the native frame is hidden.
- Integrated window control functionalities (minimize, maximize, close) using IPC handlers for better user interaction.
- Updated the TabbedLayout to include the new WindowsTitleBar, ensuring a consistent UI across platforms.
- Enhanced the README with additional details about the new window controls feature.
This commit improves the user interface on Windows by providing familiar window management controls, enhancing usability and consistency.
- Revised the introductory text to better reflect the application's purpose.
- Added installation instructions for macOS and Windows, detailing download options and setup steps.
- Enhanced the visual presentation with additional badges and download buttons for improved user experience.
- Updated the development section to clarify prerequisites and build instructions.
This commit improves the README by providing clearer guidance for users and enhancing the overall presentation of the project.
- Enhanced the decodePath and isValidEncodedPath functions to handle legacy Windows format, allowing paths like "C--Users-name-project" to be correctly decoded and validated.
- Updated tests to cover the new legacy format, ensuring proper functionality and validation.
This commit improves compatibility with legacy path formats, enhancing the utility of the path decoder.
- Wrapped the service initialization and configuration application in a try-catch block to handle potential errors during startup.
- Added logging for initialization failures to aid in debugging and ensure the main window is created if initialization fails.
This commit enhances the application's resilience by ensuring it can recover from startup errors gracefully.
- Added build and verification steps for both macOS and Windows in the GitHub Actions workflow.
- Included checks to ensure the necessary packaged inputs are present after the build process.
This commit improves the CI workflow by ensuring that builds are properly verified across platforms, enhancing reliability and consistency in the release process.
- Added a step in the GitHub Actions workflow to set the package version based on the Git tag during the release process.
- This enhancement ensures that the version in package.json reflects the tagged release, improving version management and consistency.
This commit streamlines the release process by automating version updates from Git tags.
- Updated the syncTrafficLightPosition function to only call setWindowButtonPosition on macOS, preventing errors on other platforms.
- Modified the createWindow function to conditionally include trafficLightPosition based on the operating system.
This commit enhances cross-platform compatibility by ensuring macOS-specific functionality is only executed on the appropriate platform.
- Introduced the "npmRebuild" option in package.json, set to false, to control the rebuilding of native modules during installation.
This commit enhances the package configuration by providing more control over the build process for native dependencies.
- Updated the Electron Vite configuration to dynamically exclude production dependencies, improving build performance and compatibility.
- Modified the output format in the Rollup options to CommonJS, ensuring compatibility with bundled dependencies.
- Adjusted the main entry point in package.json to reflect the new output format.
- Enhanced the README to clarify notification triggers for system notifications.
This commit optimizes the build configuration and improves documentation clarity, facilitating better dependency management and user understanding.
- Updated the electron-builder dependency from version 24.13.3 to ^25.1.8 for improved features and stability.
- Removed the pnpm overrides section from package.json, simplifying the dependency management.
This commit enhances the build process by ensuring the use of the latest electron-builder version and streamlining the package configuration.
- Replaced the placeholder GIF with an embedded video demonstrating the application.
- Updated the video source to link directly to the new demo.mp4 file in the resources directory.
This commit enhances the README by providing a more engaging and informative visual representation of the application features.
- Removed the electron-builder.yml file and integrated its configuration directly into package.json, streamlining the build process.
- Updated build scripts in package.json to simplify the distribution commands for macOS and Windows.
- Enhanced the GitHub Actions workflow to separate build and release jobs, improving CI efficiency and clarity.
- Added artifact upload and download steps to facilitate the release process for both macOS and Windows.
This commit optimizes the build configuration and CI workflow, making it more maintainable and efficient for future releases.
- Enhanced the Electron Vite configuration by modifying the externalizeDepsPlugin to exclude specific dependencies, improving build performance and compatibility.
- Updated the knip.json file to include additional dependencies in the ignore list, ensuring cleaner dependency management.
This commit improves the configuration setup for the Electron application, optimizing the handling of external dependencies.
- Updated the README to reflect new features in Claude Code, including the ability to spawn subagents via the Task tool and coordinate teams with improved visibility.
- Added details on the rendering of subagent sessions as expandable inline cards, including execution traces, metrics, and tool calls.
- Enhanced description of teammate messages, highlighting color-coded cards and team lifecycle visibility.
- Clarified session summary metrics to differentiate between teammate and subagent counts for better user insights.
This commit significantly improves the documentation of team and subagent visualization features, providing users with a clearer understanding of the capabilities and enhancements in the application.
- Added new scripts for rendering and previewing videos using Remotion, enhancing multimedia capabilities.
- Updated package.json to include Remotion dependencies and commands for rendering videos in different formats.
- Modified .gitignore to exclude Remotion output files, ensuring a cleaner repository.
- Enhanced README to reflect new features and usage instructions for video rendering.
This commit significantly improves the application's multimedia functionality by integrating Remotion, allowing users to create and preview videos seamlessly.
- Updated the session retrieval API to include an optional `SessionsByIdsOptions` parameter, allowing clients to specify the desired metadata depth (light or deep) when fetching sessions by IDs.
- Modified the `ProjectScanner` and related services to support this new option, improving flexibility in session data retrieval.
- Enhanced the HTTP client and renderer components to accommodate the new options, ensuring consistent behavior across the application.
This commit improves session management by providing users with more control over the metadata returned, optimizing performance for various use cases.
- Added a new `metadataLevel` option to the sessions pagination API, allowing clients to specify the depth of metadata returned (light or deep).
- Updated the `ProjectScanner` to handle session metadata based on the specified level, improving performance and flexibility in session data retrieval.
- Enhanced the HTTP client and session slice to support the new metadata level option, ensuring consistent behavior across the application.
This commit enhances session management by providing users with the ability to choose the level of detail in session metadata, optimizing performance for different use cases.
- Implemented a new HTTP endpoint and IPC handler for retrieving session metadata based on an array of session IDs, allowing for the loading of pinned sessions that may not be included in paginated results.
- Enhanced session management by validating session IDs and capping the number of IDs processed to improve performance and reliability.
- Updated the renderer and store to handle the new functionality, ensuring that pinned sessions are preserved and loaded correctly.
This commit enhances the application's session handling capabilities, providing users with better access to their pinned sessions.
- Added support for remote todos path in SSH handlers, improving project organization.
- Updated ProjectPathResolver to utilize the filesystem provider for extracting current working directory.
- Optimized ProjectScanner to handle session file processing in batches, enhancing performance over SSH.
- Implemented noise filtering logic in WorktreeGrouper and FileWatcher to improve session management.
- Enhanced SshFileSystemProvider with retry logic for file operations, increasing reliability during transient errors.
This commit significantly improves the handling of SSH projects and enhances overall performance and reliability in file operations.
- Introduced a new `CONTEXT_CHANGED` IPC channel for notifying renderer of context changes.
- Refactored context switching logic to separate re-wiring of file watcher events from renderer notifications.
- Updated IPC handler initialization to support both rewire-only and full context switch callbacks.
- Enhanced SSH handlers to utilize the new context rewire mechanism, improving clarity and maintainability.
- Adjusted renderer store to handle context change notifications more effectively.
This commit improves the structure and clarity of context management within the application, facilitating better handling of context switches and notifications.
- Introduced a reusable `ConfirmDialog` component to replace native `window.confirm()`, providing a styled modal that aligns with the app's theme.
- Integrated the `ConfirmDialog` into the `App` component for global access.
- Updated the `WorkspaceSection` to utilize the new confirmation dialog for profile deletion, enhancing user experience with a more consistent UI.
- Added state management for selected profiles in the `ConnectionSection`, improving user interaction when selecting saved profiles.
This commit enhances the application's UI by providing a more cohesive and user-friendly confirmation experience.
- Added SSH section validation to the configuration update process, including validation for SSH profiles.
- Implemented functions to validate SSH profiles and the overall SSH section structure.
- Integrated SSH profile management into the ConnectionSection, allowing users to select saved profiles for quick connection setup.
- Updated the WorkspaceSection to manage SSH profiles with full CRUD functionality, ensuring persistence through the ConfigManager.
- Refactored API calls to use a unified `api` module for better maintainability.
This commit significantly improves the SSH management experience by providing robust validation and user-friendly profile handling.
- Added a new `WorkspaceIndicator` component to display the active workspace and connection status.
- Integrated the `WorkspaceIndicator` into the `TabbedLayout` for improved workspace switching visibility.
- Removed the previous `ContextSwitcher` from `SidebarHeader` to streamline the UI.
- Updated `ServiceContext` and `ServiceContextRegistry` for better type handling and imports.
This commit enhances the user experience by providing a dedicated workspace indicator, facilitating easier context switching.
- Added `isElectronMode` function to determine if the app is running in Electron or a browser.
- Updated `SidebarHeader`, `TabBar`, and `TabbedLayout` components to conditionally render UI elements based on the Electron mode.
- Adjusted styles and settings gear icon visibility to enhance user experience in browser mode.
This commit improves the application's adaptability by ensuring that Electron-specific features are only available when appropriate.
- Introduced an HTTP server to facilitate communication with the application.
- Added route handlers for managing application configuration, including getting and updating settings.
- Implemented notification operations with routes for retrieving, marking, and deleting notifications.
- Created project and session management routes to list projects, sessions, and their details.
- Developed SSH connection management routes for connecting, disconnecting, and retrieving SSH state and configuration.
- Enhanced the application architecture to support real-time event streaming via Server-Sent Events (SSE).
This commit significantly expands the application's capabilities by integrating an HTTP server and various management routes, improving user interaction and functionality.
- Add 04-02-SUMMARY.md with task commits, decisions, and self-check
- Update STATE.md to Phase 4 complete (100% progress)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add WorkspaceSection to sections/index.ts barrel export
- Add 'workspace' to SettingsSection union type with HardDrive icon
- Position Workspaces tab between Connection and Notifications
- Render WorkspaceSection when workspace tab is active (no props needed)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Full CRUD UI for SSH connection profiles (add, inline edit, delete with confirm)
- Profile changes persist via ConfigManager config.update('ssh', ...)
- After save/delete, calls fetchAvailableContexts() to refresh context switcher
- Follows ConnectionSection styling patterns (inputClass, inputStyle, SettingsSectionHeader)
- Empty state with server icon when no profiles saved
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add ContextSwitcher to SidebarHeader Row 1 with visual separator
- Add Cmd+Shift+K shortcut to cycle through available contexts
- Add SSH status listener in App.tsx to refresh context list on changes
- Shortcut guard: disabled during active context switch
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add ConnectionStatusBadge with 4 visual states (Monitor/Wifi/WifiOff/Spinner)
- Add ContextSwitcher dropdown listing Local + SSH contexts with status badges
- Add availableContexts state to contextSlice
- Add fetchAvailableContexts action called on system initialization
- ContextSwitcher follows SidebarHeader dropdown pattern (outside click, escape key)
- Switcher disabled during context switch to prevent race conditions
Plan 01: ContextSwitcher dropdown, ConnectionStatusBadge, SidebarHeader
integration, keyboard shortcut (Cmd+Shift+K), and availableContexts state.
Plan 02: WorkspaceSection settings for SSH profile CRUD with auto-refresh.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Initialize context system on app mount before notification listeners
- Render ContextSwitchOverlay as first child in ErrorBoundary
- Add context:onChanged listener to sync renderer state on external context switches
- Snapshot validation already implemented in contextSlice (validateSnapshot function)
- Create ContextSwitchOverlay component with full-screen loading state
- Create useContextSwitch hook exposing switchContext/isContextSwitching/activeContextId
- Add ContextSlice to AppState type intersection
- Compose createContextSlice into store creation
- Install idb-keyval for IndexedDB persistence
- Create contextStorage service with TTL-based snapshot save/load
- Create contextSlice with switchContext and initializeContextSystem actions
- Implement snapshot validation to filter invalid tabs/selections
- Exclude transient state (loading, errors, Maps/Sets) from snapshots