Commit graph

2637 commits

Author SHA1 Message Date
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
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
85f34eb828 docs(02-service-infrastructure): create phase plan (3 plans, 3 waves)
Plan 01: ServiceContext + ServiceContextRegistry + dispose() methods
Plan 02: Wire registry into main/index.ts + update IPC routing
Plan 03: Context management IPC + preload bridge + connection profiles

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 00:49:19 +00:00
matt
ae4833e310 feat(planning): add project planning documents and configuration for SSH multi-context workspaces
- Introduced new planning files including PROJECT.md, REQUIREMENTS.md, ROADMAP.md, and STATE.md to outline the vision and requirements for SSH multi-context workspaces.
- Added ARCHITECTURE.md and CONCERNS.md to detail the codebase structure and address technical debt, known bugs, and security considerations.
- Created CONVENTIONS.md to establish coding standards and practices for the project.
- Updated .gitignore to exclude demo files and added configuration for planning tools.

This commit lays the groundwork for enhancing SSH functionality and user experience in managing multiple workspaces.
2026-02-12 09:37:58 +09: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
e2670a3a02 Enhance CI and release workflows for improved efficiency
- Updated CI workflow to trigger on specific paths for pushes and pull requests, ensuring relevant changes are monitored.
- Integrated retry logic in the release workflow for macOS packaging to enhance reliability during the build process.
2026-02-11 22:20:51 +09:00
matt
09c1304c82 Update package.json and pnpm-lock.yaml to override @electron/notarize version
- Added an override for @electron/notarize to version 2.5.0 in both package.json and pnpm-lock.yaml to ensure compatibility and resolve potential issues with notarization.
2026-02-11 22:12:42 +09:00
matt
af9f559a94 Update electron-builder configuration for macOS notarization and fix pathDecoder tests
- Added notarization team ID configuration for macOS builds.
- Corrected expected output in pathDecoder tests to reflect accurate project name extraction.
2026-02-11 22:02:30 +09: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
6ca7bed2f5 Update electron-builder configuration for macOS notarization
- Reintroduced the afterSign script for notarization in the electron-builder configuration.
- Cleaned up the configuration by removing the duplicate afterSign entry from the mac section.
2026-02-11 21:36:33 +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
070e79a8ec Update build scripts and dependencies in package.json and pnpm-lock.yaml
- Replaced pnpm dlx electron-builder with direct electron-builder command in build scripts for improved clarity and consistency.
- Specified electron-builder version in package.json and pnpm-lock.yaml to ensure consistent builds across environments.
- Added new dependencies and updated existing ones in pnpm-lock.yaml for better compatibility and functionality.
2026-02-11 20:52:05 +09:00
matt
f4dfd6c1ec Update CI workflows for macOS and Windows packaging
- Renamed macOS packaging job to 'package-mac' and updated certificate secret reference.
- Added new 'package-win' job for Windows builds, including steps for checkout, dependency installation, app building, and artifact uploading.
2026-02-11 20:45:13 +09:00
matt
ed45a1d87c Enhance build configuration and testing
- Added notarization configuration for macOS builds to support app distribution.
- Updated CI workflow to run on Ubuntu instead of macOS for improved compatibility.
- Modified test cleanup process to include retry logic for file removal.
- Refactored path handling in tests to use path.join for better cross-platform compatibility.
2026-02-11 20:44:10 +09:00
matt
c2308f41a9 Remove version specification for pnpm in CI and Release workflows to use the latest version by default. 2026-02-11 20:34:21 +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