Commit graph

74 commits

Author SHA1 Message Date
matt
b4e8eedbef refactor(jsonl.test): improve cleanup logic in analyzeSessionFileMetadata test
- 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.
2026-02-13 23:24:44 +09:00
matt
21ca76f37a Update README.md with enhanced system notification rules and rich tool call inspector details; add new media files for visual aids. 2026-02-13 15:24:59 +09:00
matt
1a8d09e67b
Update README.md 2026-02-13 15:22:54 +09:00
matt
e0e399ec31 refactor(ProjectScanner): enhance file detail retrieval and session metadata 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.
2026-02-13 14:31:11 +09:00
matt
b1e37470cb refactor(ProjectScanner): replace session filter retrieval with async method
- 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.
2026-02-13 05:06:18 +09:00
matt
49fd2b592f feat(window): implement custom title bar for Windows with native controls
- 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.
2026-02-13 04:44:34 +09:00
matt
a9ea131546 feat(readme): update README for clarity and installation instructions
- 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.
2026-02-13 02:23:30 +09:00
matt
d07485bf27 feat(pathDecoder): add support for legacy Windows-style encoded paths
- 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.
2026-02-13 02:05:26 +09:00
matt
a406f79209 fix(startup): improve error handling during app initialization
- 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.
2026-02-13 01:37:20 +09:00
matt
a517a5d96c feat(release): enhance CI workflow for macOS and Windows builds
- 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.
2026-02-13 01:34:31 +09:00
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
dfbe38782c feat(package): add npmRebuild option to package.json
- 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.
2026-02-13 00:40:25 +09:00
matt
f94cc26e34
Update README.md 2026-02-13 00:38:59 +09:00
matt
b656246658 feat(config): enhance Electron Vite configuration and package management
- 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.
2026-02-13 00:36:34 +09:00
matt
d9e5db106f fix(deps): update electron-builder version and remove pnpm overrides
- 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.
2026-02-13 00:17:08 +09:00
matt
5d439e17fe feat(docs): update README to include video demo
- 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.
2026-02-13 00:07:12 +09:00
matt
720951ec2e feat(build): refactor Electron build configuration and CI workflow
- 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.
2026-02-13 00:04:25 +09:00
matt
cffa3eb431 feat(config): update Electron Vite configuration and dependency management
- 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.
2026-02-12 23:51:31 +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
bd54e973ff wip 2026-02-12 05:54:04 +00:00
matt
293349d735 docs(04-02): complete workspace settings plan
- 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>
2026-02-12 04:44:56 +00: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
fa62433219 docs(04): create workspace UI phase plans
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>
2026-02-12 01:59:55 +00:00
matt
6df422ecef docs(03-01): complete context snapshot and restore plan
- Create comprehensive SUMMARY.md with implementation details
- Update STATE.md: Phase 3 Plan 1 complete (75% overall progress)
- Document key decisions: 5-min TTL, transient state exclusion, tab validation
- Record metrics: 7 min duration, 3 tasks, 4 files created, 494 tests passing
2026-02-12 01:42:43 +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
5b31306b20 docs(02-03): complete context IPC and profile persistence plan
- Context IPC handler infrastructure already existed from 02-02
- Added SSH profile management methods to ConfigManager
- Documented profile storage and last active context restoration
- Updated STATE.md: Phase 02 complete (3/3 plans)
- Phase 02 total duration: 12 minutes (4 min avg/plan)
2026-02-12 01:15:42 +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
d10c56adb7 docs(02-02): complete registry integration plan
- Created 02-02-SUMMARY.md with implementation details
- Updated STATE.md: Plan 2 of 3 complete, 50% progress
- Added decisions: onContextSwitched callback, SSH context ID format
- Updated metrics: 3 plans completed, 5 min average
- No deviations from plan
2026-02-12 01:06:45 +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
1b4f180e81 docs(02-01): complete ServiceContext infrastructure plan
- Created SUMMARY.md with comprehensive execution details
- Updated STATE.md: Phase 2 Plan 1 complete, 2 plans total completed
- Added decisions: ServiceContext bundling, dispose() lifecycle separation, removeAllListeners() ordering
- Self-check: PASSED (all files exist, commits verified, tests passing)
2026-02-12 00:57:54 +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