- Add platform-specific command detection (where/which)
- Use expanded environment for PATH resolution
- Handle Windows multi-path output by taking first match
- Export getExpandedEnv() from cliDetection.ts for reuse
- Add proper fallback when detection fails
Addresses review comments from PR #59
Co-authored-by: oliveiraantoniocc <411161+oliveiraantoniocc@users.noreply.github.com>
- Session previews now prefer first assistant reply over user prompt! 🚀
- Fallback to first user message when assistant response missing. 🛟
- Claude session parser stops scanning once assistant preview found. ⚡
- Codex parser captures assistant previews across message and payload formats. 🔎
- Agent message completions now populate assistant-first preview correctly. 🤖
- First-message preview now uses unified `previewMessage` selection logic. 🧠
- Timestamp handling stays accurate while improving preview meaningfulness. ⏱️
- Message counting remains intact while preview extraction gets smarter. 📊
- Preview slicing now consistently applies to assistant-first chosen text. ✂️
- Session list previews become more informative, reducing system-context noise. 🎯
- Added Windows-path truncation coverage so session lists display correctly everywhere 🪟
- Improved code-fence language parsing to support C++ mapping to cpp 🧠
- Refined About modal stats copy with clearer “Hands-on Time” labeling ⏱️
- Simplified mobile connection timeout typing for safer browser compatibility 🔧
- Centralized haptic triggering into shared constants for cleaner reuse 📦
- Upgraded haptics detection to verify vibrate is an actual function 📳
- Tuned input-mode toggle haptics to a crisp light vibration duration 🎚️
- Strengthened interrupt button feedback with consistent strong haptic pulses 🛑
- Removed redundant default export bundle from CommandInputButtons module 🧹
- Expanded test suite to catch edge cases across platforms and languages ✅
- Crash reporting now runs only in production, keeping development logs spotless. 🚀
- Renderer Sentry initialization skips local dev servers, eliminating hot-reload noise. 🔇
- TTS stdin now catches EPIPE errors, preventing unexpected crashes during playback. 🛡️
- ProcessManager stdin error handling added, logging EPIPE without taking down sessions. 🧰
- Closing tabs now respects “unread-only” filtering, choosing the next unread tab. ✨
- Keyboard shortcut tab-closing now passes unread-only state for consistent navigation. ⌨️
- MainPanel Git log opening is now optional-safe, avoiding undefined callback crashes. 🔒
- Mobile session path truncation now supports Windows separators for cleaner display. 🪟
- Mobile haptics centralized via shared triggerHaptic helper, simplifying feedback logic. 📳
- Code block parsing now supports richer language tags, trimmed for accurate highlighting. 📝
- Added Auto Run document backups for reliable reset-on-completion workflows. 🔄
- Restored reset documents from backups, then deleted backup automatically. ♻️
- Added recursive cleanup to delete all `.backup.md` files quickly. 🧹
- Hardened backup IPC with traversal blocking and folder path validation. 🛡️
- Exposed new backup APIs in preload and Maestro typings. 🔌
- Batch processor now creates backups before processing reset-enabled documents. 🚀
- Interruptions now restore in-progress reset docs, then clean remaining backups. 🧯
- Group chat export now renders using the user’s current theme colors. 🎨
- Removed embedded JSON from chat exports, focusing on polished HTML. ✨
- Exported chats now support richer markdown, links, and embedded images. 📝
- Terminal agent now defaults to PowerShell on Windows, bash elsewhere! 🚀
- PATH expansion is now platform-aware, including rich Windows install locations! 🎯
- PATH parsing now uses `path.delimiter`, fixing Windows semicolon separation! 🛠️
- Terminal PTY sessions set Windows-friendly HOME, USER, and SHELL values! ⚡
- Base terminal PATH now includes Windows System32 and Git commands reliably! 🧩
- Command runner defaults to platform-appropriate shell, boosting cross-platform usability! 🌍
- `runCommand` adds Windows-specific environment variables for better subprocess behavior! 🔧
- Shell detection now lists Windows shells: PowerShell, pwsh, cmd, WSL! 🔎
- Windows shell detection maps IDs to `.exe` binaries before `where` lookup! 🧠
- Cloudflared CLI detection now searches Windows paths like Scoop/Chocolatey/npm! 🛰️
- Add asarUnpack for node-pty so native module is extracted outside ASAR
- Add missing system dependencies (libdrm2, libgbm1, libasound2) to deb
- Add missing dependencies (libdrm, mesa-libgbm, alsa-lib) to rpm
- Quick Win 3: Reduce elapsed time timer from 1s to 3s in RightPanel
- Reduces timer callbacks by 66% during Auto Run
- Quick Win 4: Memoize batch state selectors in App.tsx
- currentSessionBatchState and activeBatchRunState wrapped in useMemo
- Prevents unnecessary re-calculation on unrelated re-renders
- Update RightPanel test to expect 3s intervals
- Document npm run lint command in CLAUDE.md and CONTRIBUTING.md
Claude ID: 9ba72f64-27a0-4682-a8f2-93febcf94609
Maestro ID: b9bc0d08-5be2-4fdf-93cd-5618a8d53b35
Reverted changes that could introduce regressions:
- git.ts: restore passing files array to diff API (vs iterating)
- FilePreview.tsx: restore inline prop detection for code blocks
- FilePreview.tsx: remove unnecessary visit() function cast
These changes modified behavior beyond type fixes and could cause issues.
- Card.tsx: Use Omit<HTMLAttributes, 'title'> to avoid title type conflict
- useWebSocket.ts: Add 'user_input' to ServerMessageType union
- App.tsx: Remove non-standard renotify property from NotificationOptions
- useMobileKeyboardHandler.ts: Use type alias for MobileKeyboardSession
- CommandInputBar.tsx: Use proper double-cast for ref typing
- serviceWorker.ts: Extract registration.active to guarded local variable
Major type fixes:
- useSettings.ts: Add type assertions for settings.get() return values
- global.d.ts: Fix playbooks API types (maxLoops, branchNameTemplate, etc.)
- global.d.ts: Fix logger API to use proper log level union type
- useAgentExecution.ts: Simplify ref type definitions
- useExpandedSet.ts: Fix Set iteration type issues
- useTemplateAutocomplete.ts: Cast refs array properly
Component fixes:
- Fix ringColor CSS property -> use --tw-ring-color CSS variable (11 files)
- Fix Lucide icon title prop -> wrap icons in span with title
- Fix confetti shapes type in FirstRunCelebration and StandingOvation
- Fix nullable costUsd checks in AgentSessionsBrowser, SessionListItem
- Fix isDuplicate boolean coercion in AutoRunDocumentSelector
- Add lastAcknowledgedBadgeLevel to PlaygroundPanel mock stats
- Make GitLogEntry additions/deletions optional to match IPC
- Fix listDocuments -> listDocs API call in DirectorySelectionScreen
Reduces lint errors from 102 to 29.
- useSessionNavigation: fixed TypeScript narrowing for entry.tabId
- useSessionPagination: made costUsd optional in AgentSession interface
- useAgentCapabilities: merge API result with defaults for optional fields
- useSessionManager: added missing imports (generateId, ToolType) and required fields
- useInputProcessing: added worktreeActive to BatchState, fixed shellCwd fallback
- useBatchProcessor: imported gitService, fixed badge function return type
- useAgentSessionManagement: null to undefined conversion for sessionName
- gitDiffParser: updated imports to FileData, HunkData, ChangeData
- FilePreview: fixed visit function typing and code inline detection
- git service: added branch to default value, fixed getDiff for file arrays
- process service: updated return types to Promise<boolean> to match IPC
Reduced lint errors from ~160 to 102. Remaining issues are primarily:
- useSettings.ts: settings.get() return type ({} | null)
- usePlaybookManagement.ts: maxLoops/branchNameTemplate not in type
- Component prop types: ringColor, LucideProps mismatches
- Add accentForeground to web ThemeProvider defaults and CSS custom properties
- Fix invalid theme property references (yellow→warning, bgHover→accentDim, info→accentText)
- Convert ringColor to --tw-ring-color CSS custom property across components
- Add LayerInput type for proper discriminated union support
- Fix all modal registerLayer calls to include required blocksLowerLayers, capturesFocus, focusTrap
- Update tests to expect 14 CSS properties (added accentForeground)
Files changed:
- 14 component files with Layer type fixes
- 4 files with ringColor conversion
- 2 web files with accentForeground
- 1 type file with LayerInput type
- 1 hook file with proper typing
- 5 test files updated
- Created src/shared/uuid.ts with generateUUID function (RFC 4122 v4 compliant)
- Removed duplicate generateUUID from agent-spawner.ts and batch-processor.ts
- Removed duplicate formatLoopDuration from batch-processor.ts and useBatchProcessor.ts
(now uses formatElapsedTime from shared/formatters.ts which was identical)
- Added 6 tests for new uuid utility
- All 219 CLI service tests passing
- Added JSDoc note to getAllFilePaths explaining it's a convenience wrapper
kept for API symmetry with getAllFolderPaths (used in tests only)
- Documented intentional difference between shared/treeUtils.ts TreeNode
and autorun.ts TreeNode in both files:
- shared TreeNode constructs paths from `name` during traversal
- autorun TreeNode has pre-computed `path` from scanDirectory
- Added @internal markers to autorun-specific TreeNode and flattenTree
Task 152 audit: no dead code, no deprecated patterns, well-typed with
generics, 33 existing tests pass.
- Created src/__tests__/shared/synopsis.test.ts with 25 unit tests
- Tests cover format parsing, ANSI cleaning, box char cleaning, fallbacks
- No dead code or duplication found - module is well-structured
- Fixed TypeScript errors: GroupChatHistoryEntry and GroupChatHistoryEntryType
were missing from renderer/types/index.ts re-exports, causing compile errors
in GroupChatInfoOverlay.tsx and groupChatExport.ts
- Added comprehensive test coverage with 27 tests for utility functions
(normalizeMentionName, mentionMatches) and type validation
- Remove duplicate isImageFile from FilePreview.tsx, import from shared
- Refactor useWorktreeValidation.ts to use shared hasUncommittedChanges
- Mark cleanBranchName and cleanGitPath as @internal (test-only usage)
- Added JSDoc comments to CLI formatter's local formatTokens and
formatDuration functions explaining intentional difference from
shared formatters (decimal format vs combined units format)
- Created comprehensive test file for shared/formatters.ts with 39
tests covering all 9 formatter functions
- All formatters verified in active use across renderer and web
Added explicit theme count test (17 themes) to catch sync issues between
ThemeId type, THEMES object, and isValidThemeId array. This ensures all
three locations stay in sync when themes are added or removed.
- Fix PROJECT_NAME to handle both Unix and Windows paths using split(/[/\\]/)
- Fix trailing slash handling with .filter(Boolean)
- Update misleading "deprecated" comment to "aliases" since PROJECT_NAME is actively used in wizard prompts
- Update tests to verify the improved behavior
Reduced type duplication between src/shared/types.ts and src/renderer/types/index.ts
by re-exporting types from shared rather than duplicating them:
- ToolType, Group, UsageStats, BatchDocumentEntry, PlaybookDocumentEntry, Playbook
are now re-exported from shared
- WorktreeConfig in renderer now properly extends base with UI-specific ghPath field
- Kept intentional differences: AgentConfig (UI-specific fields), HistoryEntry
(extends base with achievementAction)
Extract duplicated Fisher-Yates shuffle function from fillerPhrases.ts
and austinFacts.ts into shared shuffle.ts utility file (~4 net lines saved).
All 379 Wizard tests pass.
Replace local formatFileSize and formatElapsedTime functions with
shared formatters from src/shared/formatters.ts. This reduces code
duplication and improves consistency across the codebase.
The shared formatSize function is also more robust, handling GB and
TB sizes that the local version did not support.
- WizardResumeModal: Remove dead `id: ''` property from registerLayer() call (id is auto-generated)
- ScreenReaderAnnouncement: Fix useAnnouncement hook to properly use the politeness parameter that was previously accepted but ignored
Remove unused `purpleAccent` variable from AchievementCard.tsx that was
declared but never used.
Audited 11 components (AICommandsPanel, NotificationsPanel, DocumentsPanel,
PlaygroundPanel, ProcessMonitor, ThemePicker, FontConfigurationPanel,
ToggleButtonGroup, LogFilterControls, AchievementCard, SettingCheckbox).
All components use modern React patterns and have proper TypeScript types.