Commit graph

40 commits

Author SHA1 Message Date
matt
2d04b92cac feat(release): set package version from Git tag in CI workflow
- 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.
2026-02-13 01:13:56 +09:00
matt
7aef96de21 feat(window): conditionally set traffic light button position for macOS
- 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.
2026-02-13 01:03:23 +09:00
matt
524a62438e feat(visualization): enhance team and subagent visualization in README
- 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.
2026-02-12 23:43:28 +09:00
matt
c02c7d24cf feat(remotion): integrate Remotion for video rendering and preview
- 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.
2026-02-12 22:58:58 +09:00
matt
cf61a78bea feat(sessions): enhance session retrieval with metadata options
- 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.
2026-02-12 22:42:06 +09:00
matt
b42349fdba feat(sessions): introduce metadata level for session retrieval
- 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.
2026-02-12 18:02:48 +09:00
matt
2193b2ed8a feat(sessions): add support for fetching sessions by IDs
- 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.
2026-02-12 17:53:19 +09:00
matt
e057f05ce4 feat(ssh): enhance SSH project handling and performance
- 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.
2026-02-12 17:40:49 +09:00
matt
971fc142b2 feat(ipc): refactor context switching and event handling
- 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.
2026-02-12 17:08:05 +09:00
matt
0dfe445b0e feat(ui): implement ConfirmDialog for enhanced user confirmations
- 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.
2026-02-12 15:56:27 +09:00
matt
575ced5d99 feat(ssh): enhance SSH configuration management and validation
- 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.
2026-02-12 15:49:12 +09:00
matt
b200561ac1 feat(ui): introduce WorkspaceIndicator component for workspace management
- 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.
2026-02-12 15:25:17 +09:00
matt
656c9b155f feat(ui): integrate Electron mode detection for conditional UI rendering
- 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.
2026-02-12 15:04:56 +09:00
matt
7fa2f96ed4 feat(http): implement HTTP server and route handlers for configuration, notifications, projects, sessions, and SSH management
- 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.
2026-02-12 15:04:56 +09:00
matt
d00940dd9d feat(04-02): wire WorkspaceSection into SettingsView and SettingsTabs
- 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>
2026-02-12 04:43:11 +00:00
matt
8b9132eb51 feat(04-02): create WorkspaceSection settings component with SSH profile CRUD
- 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>
2026-02-12 04:41:23 +00:00
matt
58f4be0a61 feat(04-01): wire ContextSwitcher into SidebarHeader and add keyboard shortcut
- 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>
2026-02-12 04:37:49 +00:00
matt
ca60158d34 feat(04-01): add ContextSwitcher and ConnectionStatusBadge components
- 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
2026-02-12 02:18:47 +00:00
matt
4ab6b4b584 feat(03-01): wire overlay into App and add context event listener
- 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)
2026-02-12 01:39:33 +00:00
matt
f01d545ee3 feat(03-01): add context switch overlay, hook, and store wiring
- 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
2026-02-12 01:37:30 +00:00
matt
f129715dc8 feat(03-01): add IndexedDB storage layer and contextSlice
- 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
2026-02-12 01:35:29 +00:00
matt
4921c610c4 feat(02-03): add SSH profile management to ConfigManager
- Add SSH connection profile management methods to ConfigManager
- addSshProfile(): Store connection profiles for quick reconnection
- removeSshProfile(): Remove profiles by ID
- updateSshProfile(): Update existing profiles
- getSshProfiles(): Retrieve all profiles
- setLastActiveContextId(): Persist last active context for app restart
- profiles array and lastActiveContextId field in ssh config section
- Context API already existed from plan 02-02 with all required IPC handlers and preload bridge
2026-02-12 01:14:08 +00:00
matt
4aafc9c4fc feat(02-03): create context IPC handler and channel constants
- Add CONTEXT_LIST, CONTEXT_GET_ACTIVE, CONTEXT_SWITCH, CONTEXT_CHANGED channel constants
- Create context.ts IPC handler module with list, getActive, and switch operations
- Update handlers.ts to accept onContextSwitched callback and register context handlers
- Pass onContextSwitched from main index.ts to IPC initialization
- Context switching triggers onContextSwitched callback for event re-wiring
2026-02-12 01:10:08 +00:00
matt
24051acac8 refactor(02-02): IPC handlers route via ServiceContextRegistry
- projects.ts: Accept registry, resolve projectScanner via getActive()
- sessions.ts: Accept registry, destructure all services from getActive()
- search.ts: Accept registry, resolve projectScanner via getActive()
- subagents.ts: Accept registry, resolve all services from getActive()
- ssh.ts: Accept registry, create/destroy ServiceContext on connect/disconnect
  - SSH_CONNECT: Create new ServiceContext with SSH provider, register, start, switch
  - SSH_DISCONNECT: Switch to local, destroy SSH context
  - Import onContextSwitched from index.ts to rewire file watcher events
- All handlers now call registry.getActive() at invocation time
- No module-level service variables remain - fully dynamic routing
2026-02-12 01:04:29 +00:00
matt
5bf41c6ed8 refactor(02-02): main/index.ts to use ServiceContextRegistry
- 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
2026-02-12 01:04:20 +00:00
matt
767c985947 feat(02-01): add comprehensive dispose() to FileWatcher and DataCache
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.
2026-02-12 00:55:44 +00:00
matt
777d93f968 feat(02-01): create ServiceContext and ServiceContextRegistry
- 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
2026-02-12 00:55:26 +00:00
matt
c12b3295e9 feat(01-01): refactor SubagentDetailBuilder to use FileSystemProvider
- 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>
2026-02-12 09:15:06 +09:00
matt
a3f5dafdab feat(01-01): thread FileSystemProvider through SessionParser and SubagentResolver
- 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>
2026-02-12 09:12:49 +09:00
matt
ad4e75b8e5 Implement SSH last connection management and enhance IPC handlers
- 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.
2026-02-12 00:42:21 +09:00
matt
8a671bc53f Refactor NotificationTrigger settings for improved match field options
- 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.
2026-02-12 00:27:46 +09:00
matt
921420b946 Enhance SSH functionality and configuration management
- 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.
2026-02-12 00:14:41 +09:00
matt
4b56186f7c add ssh suport 2026-02-11 13:34:25 +00:00
matt
a8abe52eb2 Rename project from "Claude Code Context" to "claude-devtools" across all relevant files and documentation. Update configuration paths and metadata to reflect the new project name, ensuring consistency in branding and user experience. 2026-02-11 21:53:43 +09:00
matt
6522b39ce8 Update README and enhance UpdateDialog accessibility
- 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.
2026-02-11 21:30:19 +09:00
matt
540aefc3d3 Implement auto-update functionality and enhance build configuration
- 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.
2026-02-11 21:23:40 +09:00
matt
fc48f6e099 Refactor CI workflows and enhance test cleanup process
- 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.
2026-02-11 20:58:46 +09:00
matt
e8f65cf492 Add CI and Release workflows; enhance loading skeletons and splash screen
- 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.
2026-02-11 20:31:27 +09:00
matt
5a0e4c474f Refactor extractProjectName to accept cwdHint for improved project name extraction. Update ErrorTriggerChecker to utilize new parameter, ensuring accurate project name retrieval in various contexts. Enhance tests to cover new functionality and edge cases. 2026-02-11 20:12:25 +09:00
matt
96fab90c37 Initialize project structure with essential configuration files including .editorconfig, .gitattributes, .gitignore, and TypeScript settings. Add build and linting configurations, along with README, LICENSE, and contribution guidelines. Set up Tailwind CSS and ESLint for styling and code quality. Include initial package.json and pnpm workspace configuration for dependency management. 2026-02-11 15:52:00 +09:00