- Replace global service variables with ServiceContextRegistry
- Create local context at startup with LocalFileSystemProvider
- Register local context in registry and start it
- Wire file watcher events via wireFileWatcherEvents helper
- Export onContextSwitched callback for SSH handler
- Remove handleModeSwitch callback (replaced by registry pattern)
- Update initializeIpcHandlers to accept registry instead of individual services
- Remove reinitializeServiceHandlers entirely from handlers.ts
- ServiceContextRegistry pattern eliminates need for service recreation on mode switch
FileWatcher.dispose():
- Calls stop() to close watchers
- Clears all timers: retry, debounce, catch-up, polling
- Clears all tracking maps: lastProcessedLineCount, lastProcessedSize, activeSessionFiles, polledFileSizes, processingInProgress, pendingReprocess
- Calls removeAllListeners() LAST to prevent events during cleanup
- Sets disposed flag to prevent reuse
DataCache.dispose():
- Clears cache Map
- Disables caching
- Sets disposed flag to prevent reuse
- Auto-cleanup interval managed by caller (ServiceContext)
Both services prevent restart after disposal for proper lifecycle management.
- ServiceContext: service bundle for single workspace context
- Encapsulates all session-data services (ProjectScanner, SessionParser, SubagentResolver, ChunkBuilder, DataCache, FileWatcher)
- Manages service lifecycle (start, stop, dispose)
- Proper dependency chain wiring
- ServiceContextRegistry: coordinator for all contexts
- Manages Map of contexts with active tracking
- Enforces local context permanence (cannot be destroyed)
- Context switching (stops old watcher, starts new watcher)
- Safe disposal of SSH contexts
- Updated barrel exports in infrastructure/index.ts
- Remove dynamic fs/promises, os, and path imports from SubagentDetailBuilder
- Add fsProvider and projectsDir parameters to buildSubagentDetail function
- Replace fs.access() with fsProvider.exists() for file existence check
- Replace os.homedir() path construction with projectsDir parameter
- Update ChunkBuilder.buildSubagentDetail() to accept and pass new parameters
- Update IPC subagents handler to obtain provider and projectsDir from ProjectScanner
- Update initializeSubagentHandlers to accept ProjectScanner parameter
- Update handlers.ts to pass ProjectScanner to subagent handler initialization
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add getFileSystemProvider() getter to ProjectScanner
- Update SessionParser.parseSessionFile() to pass provider to parseJsonlFile()
- Update SessionParser.parseSubagentFile() to pass provider to parseJsonlFile()
- Update SubagentResolver.parseSubagentFile() to pass provider to parseJsonlFile()
- Update SessionParser test mock to include getFileSystemProvider method
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Added functionality to save and retrieve the last SSH connection configuration, allowing for auto-fill on subsequent launches.
- Introduced new IPC channels for saving and getting the last SSH connection details.
- Updated the connection state management to persist the last connection information upon successful connection.
- Enhanced the ConnectionSection component to load the last connection details on mount and pre-fill the form fields.
- Refactored relevant types and state management to accommodate the new SSH last connection features.
- Removed the 'toolName' and 'matchField' properties from the default trigger configuration.
- Updated the default match field options to include a new option for matching against the entire JSON-serialized input.
- Added SSH config host alias support, allowing users to fetch and resolve host entries from the SSH config file.
- Introduced SshConfigParser to handle parsing of ~/.ssh/config and retrieving host aliases.
- Updated ConnectionSection to include a combobox for selecting SSH config hosts with auto-fill capabilities.
- Enhanced SshConnectionManager to utilize the new SshConfigParser for resolving host configurations.
- Added IPC channels for fetching SSH config hosts and resolving host aliases.
- Updated relevant types and state management to accommodate new SSH config features.
- Updated the README to use a higher resolution icon for better visibility.
- Improved the UpdateDialog component by adding a backdrop button for dismissing the dialog and enhancing accessibility with ARIA attributes.
- Integrated electron-updater for automatic updates, including IPC handlers for checking, downloading, and installing updates.
- Updated electron-builder configuration to include entitlements and notarization scripts for macOS.
- Enhanced README with installation instructions and updated features.
- Added new components for update notifications and dialogs in the renderer.
- Improved CI workflow permissions for better release management.
- Simplified the CI workflow by consolidating the validate job to run only on Ubuntu.
- Introduced a new test job that runs on both Ubuntu and Windows, including steps for dependency installation and testing.
- Updated the release workflow to directly publish macOS and Windows packages without intermediate artifact uploads.
- Improved the test cleanup process to include a delay and enhanced error handling for file removal on Windows.
- Introduced CI workflow for automated testing and validation on push and pull request events.
- Added Release workflow for packaging and distributing the application on version tag pushes.
- Enhanced loading skeletons in ChatHistory and ProjectsGrid components for improved visual feedback.
- Updated splash screen with new animations and styles for better user experience.
- Refined CSS variables for skeleton loading states to ensure consistency across themes.