-
Notifications
You must be signed in to change notification settings - Fork 1
feat: Improve onboarding wizard with password step, Homebrew support, and keyboard navigation #235
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
… and keyboard navigation - Add Password step to all platforms for sudo command authentication - Add Homebrew installation support for macOS in Prerequisites step - Switch GhAuthStep from EmbeddableTerminal to TabbedTerminal for better interactivity - Add password show/hide toggle with Material icons (Visibility/VisibilityOff) - Make password label platform-specific (macOS/Windows/System Password) - Add keyboard navigation: auto-focus primary buttons and Enter key to proceed - Add autoFocus parameter to EmbeddableTerminal and ProperTerminal - Fix scroll event consumption to prevent propagation to parent containers - Fix right-click to always show context menu (not forwarded to mouse-aware apps) - Add npm global bin to PATH setup during AI assistant installation - Add .claude/ to gitignore - Update CLAUDE.md with platform detection pattern Generated with [Claude Code](https://claude.com/claude-code)
Pull Request Review - PR #235OverviewThis PR significantly improves the onboarding wizard with password management, Homebrew support, and keyboard navigation. The implementation is well-structured and follows the repository conventions. Strengths1. Excellent Security Practices
2. Platform Abstraction
3. UX Improvements
4. Code Quality
Issues and ConcernsCritical: Password Security Location: OnboardingSteps.kt:292 and OnboardingSteps.kt:1123 While passing password via environment variable is better than command-line args, there are still risks:
Recommendations:
High: Shell Script Error Handling Location: OnboardingSteps.kt:337-338 Issues with the profile file modification:
Recommendation: Create backup first and use more precise pattern matching (sed with better regex) Medium: Installation Success Detection The Homebrew install has good additional verification via onOutput callback checking for success message (line 531-535). Good practice! Low: Hardcoded Temp File Path Location: OnboardingSteps.kt:282, OnboardingSteps.kt:354 Recommendation: Use mktemp to generate unique temp file names to avoid race conditions Best PracticesRight-Click Context Menu Fix (ProperTerminal.kt:806) Scroll Event Consumption (ProperTerminal.kt:1365) Accessibility Testing RecommendationsThe test plan is comprehensive. Additionally verify:
Performance Considerations
No performance red flags. Security Summary
Overall AssessmentQuality: 4/5 stars This is a solid, well-implemented PR that significantly improves the onboarding experience. The code follows project conventions, platform abstraction is excellent, and the UX improvements are substantial. Primary concerns:
Recommendation: Approve with minor revisions The security concerns are manageable and the existing implementation is already better than inline password prompts. The suggested improvements can be addressed in follow-up commits or a future PR. Great work on this PR! The improvements to keyboard navigation and the password management approach are particularly well done. |
Skip async AI/VCS detection in TabbedTerminal when used in onboarding dialog to prevent focus issues that caused context menu to dismiss. Generated with [Claude Code](https://claude.com/claude-code)
Code Review - PR #235OverviewThis PR adds several valuable UX improvements to the onboarding wizard, including password collection for sudo operations, Homebrew support for macOS, improved keyboard navigation, and important bug fixes for scroll/right-click event handling. StrengthsGood Implementation Decisions
Security ConcernsCRITICAL: Password Injection VulnerabilityLocation: OnboardingWizard.kt:1106 and OnboardingSteps.kt:296 The password is used with echo BOSSTERM_SUDO_PWD piped to sudo -S. This creates a command injection vulnerability if the password contains shell metacharacters. Recommended Fix: Use printf or here-string to prevent interpretation. Apply to all instances using echo with BOSSTERM_SUDO_PWD. Potential Bugs
Overall AssessmentThis is a high-quality PR with excellent UX improvements. Code follows conventions well. The password injection vulnerability is the only blocking issue - once fixed, ready to merge. Recommendation: Request changes for security fix, then approve. |
- Add findPattern and findPatternRegex methods to TabbedTerminalState for searching terminal buffer content - Add PatternMatch data class for search results - GhAuthStep now auto-detects GitHub OTP codes (XXXX-XXXX format) - Show animated "Copy Code" button when OTP is detected - Polls terminal buffer every 500ms during authentication Generated with [Claude Code](https://claude.com/claude-code)
Code Review - PR #235: Onboarding Wizard ImprovementsOverall, this is a solid enhancement to the onboarding experience with well-structured code. The password-based approach eliminates inline prompts and the keyboard navigation improves UX significantly. Below are my findings organized by category. ✅ Strengths
🔴 Critical Security Issues1. Password Storage in Environment Variable (HIGH SEVERITY)Location: Issue: Admin password is passed via environment = mapOf("BOSSTERM_SUDO_PWD" to adminPassword)Risks:
Recommendation: Use echo "$ADMIN_PASSWORD" | sudo -S commandBetter yet, write password to a secure temp file with 0600 permissions, use it, then shred it immediately. 2. Script Injection VulnerabilityLocation: Issue: The Homebrew installation script uses heredoc with variable interpolation but doesn't escape the password properly. While Recommendation: Sanitize password input or use a more secure authentication method. 3. Plaintext Password in MemoryLocation: var adminPassword by remember { mutableStateOf("") }Issue: Password stored as plain String in memory without any protection. Kotlin Strings are immutable and may remain in memory longer than needed. Recommendation:
|
Replace confirmation dialog with multi-step wizard when typing uninstalled commands (claude, gh, codex, gemini, opencode). The wizard flow is: - Linux: Password → Installing → (GhAuth if gh) → Complete - macOS/Windows: Installing → (GhAuth if gh) → Complete Key changes: - New wizard/ package with reusable WizardStep, WizardState, WizardDialog - WizardStepBuilders for common patterns (password, terminal, complete) - ToolInstallWizard using the framework for AI/VCS tool installation - Fixed sudo password handling using BOSSTERM_SUDO_PWD env var - Auto-focus password field, hide confusing Next button on GH Auth step - Post-install: clear line, show success, run command in fresh shell Generated with [Claude Code](https://claude.com/claude-code)
Code Review for PR #235This PR introduces a comprehensive wizard framework and improves the onboarding experience. Overall, this is a well-architected and thoughtfully designed change. Here's my detailed feedback: ✅ Strengths1. Excellent Architecture
2. Code Quality
3. User Experience Improvements
4. API Design
|
🔍 Issues and Concerns1. Security: Password Handling
|
📊 Testing ConcernsNo Automated TestsThis PR adds significant functionality but no unit tests for:
Recommendation: Add unit tests for the wizard framework core logic. Manual Test CoverageThe test plan is comprehensive but relies entirely on manual testing across 3 platforms. Consider adding:
🎯 Minor Issues1. Magic Numbers
2. Inconsistent Naming
3. Documentation
4. Dead Code?The PR mentions replacing confirmation dialogs, but legacy code is kept for 'backward compatibility'. Is this truly needed, or can it be removed in a follow-up? |
🚀 Performance Considerations1. Buffer ScanningfindPatternRegex scans the entire buffer (history + screen) on every call. For OTP detection polling every 500ms, this could be expensive on large buffers. Optimization: Consider:
2. Snapshot CreationcreateSnapshot() vs createIncrementalSnapshot() - the PR mentions 'lock-free rendering' benefits of incremental snapshots. Why does findPattern use createSnapshot() while findPatternRegex uses createIncrementalSnapshot()? Question: Should both use incremental snapshots for consistency? ✨ Nice Touches
📝 SummaryThis is high-quality work with solid architecture and thoughtful UX improvements. The main concerns are:
Recommendation: Approve with changesThe architectural improvements outweigh the issues, but I'd strongly recommend addressing the security concern before merging to master. Great work on this PR! The wizard framework will be very useful for future features. 🎉 |
Allow users to restart gh auth login if something goes wrong. The Reset button recreates the terminal and clears OTP detection. Generated with [Claude Code](https://claude.com/claude-code)
PR Review: Onboarding Wizard ImprovementsOverviewThis is a substantial and well-structured PR that introduces a generic wizard framework and significantly improves the onboarding experience. The changes are well-organized with ~2400 additions across 15 files. Code Quality & Architecture✅ Strengths1. Generic Wizard Framework
2. Platform Detection
3. Component Refactoring
4. TabbedTerminalState API Additions
Security Considerations
|
- Reinstall node when npm is missing (handles broken npm state) - Always run `nvm use default` after install block - Source nvm explicitly in post-install command (login non-interactive shell doesn't source .zshrc/.bashrc) Fixes issue where gemini/codex/opencode install succeeds but command is not found afterward. Generated with [Claude Code](https://claude.com/claude-code)
Code Review: PR 235 - Onboarding Wizard ImprovementsOverviewThis is a substantial and well-structured PR that introduces a generic wizard framework and significantly improves the onboarding experience. StrengthsArchitecture
Code Quality
UX Improvements
Issues and Concerns1. Security - Password HandlingLocation: OnboardingSteps.kt:297-299, WizardStepBuilders.kt:178 Password passed via BOSSTERM_SUDO_PWD environment variable has security trade-offs:
Recommendation: Document this security trade-off 2. Error Handling - Homebrew InstallationLocation: OnboardingSteps.kt:288-362
Recommendation: Add password validation and early exit on failure 3. Race Condition - OTP DetectionLocation: WizardStepBuilders.kt:361-369 Polls every 500ms - might miss OTP if it appears and disappears quickly Recommendation: Consider using terminal output callback 4. Resource Leaks - Terminal StateLocation: WizardStepBuilders.kt:358-376 When resetKey changes, brief window where old terminal might not dispose immediately Recommendation: Use state holder that survives recomposition 5. Code DuplicationLocation: TabbedTerminal.kt:404-470 Menu handling for AI assistants is duplicated for each assistant Recommendation: Refactor to helper function 6. Missing Error RecoveryLocation: ToolInstallWizard.kt:126-131 Post-install command fails silently if nvm not installed Recommendation: Add error checking and feedback Performance
Test CoverageMissing tests for:
Recommendation: Add unit tests for WizardState and integration tests Minor Issues
Recommendations SummaryMust Fix (Before Merge)
Should Fix (High Priority)
Nice to Have
ConclusionHigh-quality PR that significantly improves onboarding. Wizard framework is well-architected. Main concerns are error handling and resource leaks. With recommended fixes, this PR is ready to merge. Overall Rating: 8.5/10 Great work on UX improvements and wizard framework! Generated with Claude Code |
Summary
Test plan
🤖 Generated with Claude Code