When the command input is an array (e.g., ["/bin/zsh", "-lc", "git checkout main"]),
it was being displayed without spaces between elements. Added formatCommand helper
function to properly join array elements with spaces.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add support for dynamically switching session modes and models through
the ACP protocol. This enables users to change the AI model or operating
mode during an active session.
Changes:
- Add ModeSelector and ModelSelector dropdown components
- Extend ACP client to handle mode/model update notifications
- Add IPC channels for mode/model state management
- Update Conductor and SessionLifecycle for dynamic switching
- Add max-height constraint to dropdowns for better UX
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
HTML spec doesn't allow <button> inside <button>. The delete button was
nested inside SidebarMenuButton causing React hydration errors. Changed
to <div role="button"> with keyboard support for accessibility.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Split 773-line Conductor class into 4 modular components using dependency injection:
- SessionLifecycle: Session CRUD operations
- AgentProcessManager: Agent process lifecycle management
- PromptHandler: Prompt sending with history replay and G-3 support
- G3Workaround: AskUserQuestion answer injection mechanism
Added comprehensive unit tests for all new modules (56 new tests), bringing total test coverage to 167 tests. Maintained backward compatibility - all callers continue using identical APIs. TypeScript compilation passes with no errors.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- Add useChatScroll hook with IntersectionObserver for precise bottom detection
- Add "Scroll to bottom" button that appears when user scrolls up
- Use requestAnimationFrame for smooth scrolling without jitter
- Implement user scroll lock to respect user intent during streaming
- Auto-scroll only when user is at bottom
Also includes React best practices cleanup:
- Fix Rules of Hooks violation in ThoughtBlockView
- Add useMemo for expensive groupUpdatesIntoMessages
- Hoist ReactMarkdown components outside render
- Wrap handlers with useCallback
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Changed default font from Geist Sans to Inter for better rendering of full-width Chinese punctuation. Added Chinese font fallbacks (PingFang SC, Microsoft YaHei, Noto Sans SC) to properly display Chinese characters and punctuation marks.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- Fix getEnhancedPath() to use ';' instead of ':' on Windows
- Fix Settings.tsx agent status check to handle undefined agent results
- This resolves opencode detection failure on Windows systems
- Platform-aware separator selection ensures cross-platform compatibility
- UI now properly displays agent installation status
Fixes multica-ai/multica issue where opencode showed as not installed despite being properly installed and available in PATH.
- Remove arrow for cleaner popover aesthetic
- Add backdrop blur and subtle shadow for depth
- Use rounded-lg for rounder corners
- Default to top positioning with 4px offset
- Disable tooltip on active sidebar items
- Update shrink-0 class names (linter auto-fix)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add flex flex-col to RightPanel inner div so RightPanelContent's
flex-1 overflow-auto can work properly, allowing FileTree to scroll
when content exceeds panel height.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add directoryExists runtime check for sessions
- Show warning banner when directory not found
- Disable input and only allow session deletion
- Add withDirectoryExists helper to reduce code duplication
- Validate directory on app focus to detect deleted folders
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Refactors CollapsibleAssistantMessage to use shadcn Collapsible
component pattern, making the entire summary row clickable with
hover background effect - consistent with ToolCallItem styling.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
GUI apps on macOS don't inherit PATH from shell dotfiles (.zshrc, .bashrc, etc.).
This causes agent commands to fail when launched from Finder/Dock.
- Add fix-path dependency to correct PATH on app start
- Configure electron-vite to bundle ESM-only dependencies (fix-path, shell-path, strip-ansi)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add electron-updater for automatic updates from GitHub releases
- Configure electron-builder to publish to GitHub
- Create AutoUpdater module in main process
- Add UpdateNotification component in bottom-right corner
- Support check, download, and install update flow
- Only check for updates in production mode
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>