- Replaced Math.random().toString(36).substr(2, 9) with crypto.randomUUID()
- Provides cryptographically secure random values instead of weak randomness
- Eliminates use of deprecated substr() method
- Returns standard RFC4122 UUID format
Removed duplicate star emoji (⭐) entry from the Nature section
(line 44) in emojis.ts. The star emoji now only appears once in
the Symbols section where it belongs.
Resolves housekeeping task #13
These properties may not exist on legacy sessions loaded from storage,
causing type inconsistencies. The code already handles their absence
with defensive patterns (|| []), so making them optional is the correct
fix. Also updated all MOCK_SESSIONS to include these properties for
consistency with real session creation.
- Created separate electron-store instances for sessions and groups
- Added IPC handlers for sessions:getAll, sessions:setAll, groups:getAll, groups:setAll
- Exposed session/group persistence APIs via preload.ts
- Updated App.tsx to load from electron-store with automatic localStorage migration
- Migration runs once on first load and cleans up old localStorage data
- Resolves inconsistent persistence patterns and prevents data loss on cache clear
Completes housekeeping task #10
Replace all identified 'any' types with proper TypeScript interfaces to improve type safety:
- Added ProcessConfig, AgentConfig, and DirectoryEntry interfaces to preload.ts
- Exported matching interfaces in src/renderer/types/index.ts
- Updated all MaestroAPI type definitions to use proper types
- Changed generic 'any' to 'unknown' for settings values (more type-safe)
- Updated SettingsModal.tsx to use Theme and Shortcut types instead of 'any'
- Fixed all theme picker and shortcuts filter type annotations
All files build successfully with proper type checking.
Wrapped MOCK_GROUPS and MOCK_SESSIONS in process.env.NODE_ENV === 'development'
conditionals to ensure they only exist during development. Production builds now
receive empty arrays, preventing unnecessary test data from shipping to users.
This resolves housekeeping task #9.
Removed incomplete tunnel implementation that was returning fake URLs.
- Removed tunnel:start and tunnel:stop IPC handlers from main process
- Removed tunnel API from preload contextBridge
- Added documentation comment noting tunnel feature is planned for Phase 6
- Tunnel UI settings remain in place for future implementation
The tunnel feature is documented as a planned Phase 6 feature in PRD.md
and CLAUDE.md:385. This change removes the non-functional placeholder
code from production while keeping the UI settings for future use.
Resolves housekeeping task #8
Removed Clock, Command, MessageSquare, and Sparkles icons from App.tsx import statement as they were not being used in the component. This reduces bundle size by approximately 2KB.
Resolves housekeeping task #7.
Moved the AgentConfig interface definition from SettingsModal.tsx and
NewInstanceModal.tsx to the shared types file (src/renderer/types/index.ts)
to eliminate code duplication and establish a single source of truth.
Changes:
- Added AgentConfig interface to src/renderer/types/index.ts
- Updated SettingsModal.tsx to import AgentConfig from shared types
- Updated NewInstanceModal.tsx to import AgentConfig from shared types
Resolves housekeeping task #6
Removed the execCommand() method that used naive space-splitting for argument parsing, which could break with filenames containing spaces. Replaced its single usage in git:isRepo handler with direct call to execFileNoThrow using structured array arguments.
This change:
- Eliminates command parsing vulnerability (#2)
- Reduces attack surface by removing unnecessary abstraction
- Maintains consistency with project security patterns
- All git operations now consistently use execFileNoThrow
Fixes#2 in Housekeeping.md (CRITICAL security issue)