## Summary
- Fix critical typo in playwright MCP server configuration
- Change @playright/mcp to @playwright/mcp in setup/components/mcp.py
- Prevents MCP installation failures due to package not found errors
## Test plan
- [x] Verify package name is correctly spelled as @playwright/mcp
- [x] Confirm no other playwright typos exist in codebase
- [x] Test MCP installation process works with corrected package name
🤖 Generated with [Claude Code](https://claude.ai/code)
# Fix Windows user directory validation for aliased usernames
## 🐛 Problem Description
The current security validation in `setup/utils/security.py` fails when
Windows users have an alias username that doesn't match their profile
directory name. This occurs because the validation constructs the
expected path using `%USERNAME%` but compares it against the actual
profile directory path.
### Issue Details
- **Error**: `Installation must be in current user's directory (A)`
- **Root Cause**: Username alias `A` != profile directory `User`
- **Affected Code**: `SecurityValidator.validate_installation_target()`
line ~390
### Example Scenario
```
USERNAME=A
USERPROFILE=C:\Users\User
Target Path=C:\Users\User\.claude
Expected by validation: \users\a\
Actual path contains: \users\user\
Result: Validation fails
```
## 🔧 Proposed Solution
Replace the username-based path construction with actual home directory
comparison
## 📋Changes Made
File: `setup/utils/security.py`
Lines ~385-395 in `validate_installation_target()` method:**
## ✅ Benefits
1. **Fixes alias username issue**: Works with any username/profile
directory combination
2. **More accurate validation**: Uses actual filesystem paths instead of
environment variables
3. **Maintains security**: Still prevents installation outside user
directory
4. **Better error messages**: Shows actual username when available
5. **Cross-platform compatibility**: `Path.home()` works on all
platforms
## 🧪 Test Cases
### Test Case 1: Alias Username (Current Bug)
```python
# Environment
USERNAME=A
USERPROFILE=C:\Users\User
# Test
target = Path("C:/Users/User/.claude")
result, errors = SecurityValidator.validate_installation_target(target)
# (currently fails)
assert result == True, "Expected success"
```
### Test Case 2: Matching Username (Currently Works)
```python
# Environment
USERNAME=User
USERPROFILE=C:\Users\User
# Test
target = Path("C:/Users/User/.claude")
result, errors = SecurityValidator.validate_installation_target(target)
assert result == True, "Expected success"
```
### Test Case 3: Outside User Directory (Should Fail)
```python
# Test
target = Path("C:/Users/OtherUser/.claude")
result, errors = SecurityValidator.validate_installation_target(target)
# Expected: Failure
assert result == False
assert "current user's directory" in errors[0]
```
## Related Issues
#190
Fix typo in playwright MCP server configuration where @playright/mcp
was incorrectly specified instead of @playwright/mcp, which would
cause installation failures.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
# summary
* this pr refactors superclaude’s install system to boost
maintainability, cut duplicate code, and most important fixes a bunch of
issues that ppl are having when trying to install v3
Fixes: #172#182#189#193#201#202#206#207
## key changes:
### architecture improvements
* moved shared logic to a base component class to reduce duplication.
* shifted config, file, and settings managers to a managers/ module for
better organization.
* streamlined installer logic by removing duplicate code patterns.
### component system refactoring
* unified install flow with custom hooks (_install(), _post_install()).
* components now auto-discover files, no hardcoding (sub)path names.
* centralized error handling and logging.
* security validation moved to base class for consistency.
### code organization
* simplified component files by leveraging base class logic.
* eliminated repetitive validation, install, and file management code.
* cleaned up imports after module restructure.
### loc impact
* 554 insertions, 863 deletions.
* net: 309 lines cut, with added functionality.
## next steps
### e2e tests
* test migration from v2: use an invalid `.claude/settings.json` with
superclaude config (i.e fields like `framework`, `components`) and
verify it migrates to the new metadata json.
### cleanup and chores
* there's still bits of dead code from the initial v3 commit that i've
noticed while refactoring this shit
* update documentation
* add guardrails (maybe use github actions?) so we can't push stuff that
breaks users envs onto master
* Consolidate installation check logic using SettingsManager methods
* Simplify component retrieval by delegating to SettingsManager
* Add 'all' components shorthand support in installer
* Component Base Class:
* Add constructor parameter for component subdirectory
* Move file discovery utilities to base class to avoid repetition in subclasses
* Same for validate_prerequisites, get_files_to_install, get_settings_modifications methods
* Split install method into _install and _post_install for better separation of concerns
* Add error handling wrapper around _install method
* All Component Subclasses:
* Remove duplicate code now handled by base class
* Use shared file discovery and installation logic
* Simplify metadata updates using base class methods
* Leverage base class file handling and validation
* Hooks Component:
* Fix the logic for handling both placeholder and actual hooks scenarios
* MCP Component:
* Fix npm package names and installation commands
* Move ConfigManager, SettingsManager, and FileManager from setup/core to setup/managers with new init.py for cleaner organization.
* Update SettingsManager with enhanced metadata handling methods and installation detection utilities.
While installing on my windows machine, I was getting error
```
python -m SuperClaude install
Traceback (most recent call last):
File "<frozen runpy>", line 189, in _run_module_as_main
File "<frozen runpy>", line 148, in _get_module_details
File "<frozen runpy>", line 159, in _get_module_details
File "<frozen importlib._bootstrap_external>", line 1160, in get_code
File "<frozen importlib._bootstrap_external>", line 1090, in source_to_code
File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
File "D:\prac_repo\AI\SuperClaude\SuperClaude\__main__.py", line 206
^
SyntaxError: invalid non-printable character U+00A0
```
* refactor: pyproject.toml to use Hatchling as the build backend and update project metadata
- Changed build backend from setuptools to hatchling.
- Updated project name, description, authors, and dependencies.
- Added project URLs and scripts section for SuperClaude.
- Configured versioning and build targets for wheel and sdist.
* feat: Update installation instructions in README.md to reflect new package management commands using 'uv' instead of 'pip'.
* feat: Add uv.lock file to manage package dependencies and versions for SuperClaude
* fix: Update library usage guidelines in RULES.md to reference pyproject.toml instead of requirements.txt
docs: revise installation instructions in README.md to clarify the two-step process for SuperClaude setup, including detailed steps for package installation and running the installer.