Update claude-code-installer.ps1
This commit is contained in:
@@ -31,6 +31,12 @@
|
||||
$ErrorActionPreference = "Stop"
|
||||
$ProgressPreference = "SilentlyContinue"
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Configuration
|
||||
#-------------------------------------------------------------------------------
|
||||
|
||||
$script:BoxWidth = 65 # Inner width of boxes
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Color and Display Functions
|
||||
#-------------------------------------------------------------------------------
|
||||
@@ -48,66 +54,193 @@ function Write-ColorText {
|
||||
}
|
||||
}
|
||||
|
||||
function Write-BoxTop {
|
||||
param([int]$Width = $script:BoxWidth)
|
||||
$line = "─" * $Width
|
||||
Write-ColorText " ┌$line┐" -Color White
|
||||
}
|
||||
|
||||
function Write-BoxMiddle {
|
||||
param([int]$Width = $script:BoxWidth)
|
||||
$line = "─" * $Width
|
||||
Write-ColorText " ├$line┤" -Color White
|
||||
}
|
||||
|
||||
function Write-BoxBottom {
|
||||
param([int]$Width = $script:BoxWidth)
|
||||
$line = "─" * $Width
|
||||
Write-ColorText " └$line┘" -Color White
|
||||
}
|
||||
|
||||
function Write-BoxTitle {
|
||||
param(
|
||||
[string]$Title,
|
||||
[int]$Width = $script:BoxWidth
|
||||
)
|
||||
$padding = $Width - $Title.Length - 2
|
||||
$leftPad = [math]::Floor($padding / 2)
|
||||
$rightPad = $padding - $leftPad
|
||||
|
||||
Write-ColorText " │" -Color White -NoNewline
|
||||
Write-ColorText (" " * ($leftPad + 1)) -Color White -NoNewline
|
||||
Write-ColorText $Title -Color White -NoNewline
|
||||
Write-ColorText (" " * ($rightPad + 1)) -Color White -NoNewline
|
||||
Write-ColorText "│" -Color White
|
||||
}
|
||||
|
||||
function Write-BoxEmpty {
|
||||
param([int]$Width = $script:BoxWidth)
|
||||
Write-ColorText " │" -Color White -NoNewline
|
||||
Write-ColorText (" " * $Width) -Color White -NoNewline
|
||||
Write-ColorText "│" -Color White
|
||||
}
|
||||
|
||||
function Write-BoxContent {
|
||||
param(
|
||||
[string]$Label,
|
||||
[ConsoleColor]$LabelColor = "Cyan",
|
||||
[string]$Value,
|
||||
[ConsoleColor]$ValueColor = "Green",
|
||||
[int]$LabelWidth = 16,
|
||||
[int]$Width = $script:BoxWidth
|
||||
)
|
||||
|
||||
$paddedLabel = $Label.PadRight($LabelWidth)
|
||||
$remainingWidth = $Width - $LabelWidth - 4 # 4 for prefix spacing
|
||||
$paddedValue = $Value
|
||||
if ($Value.Length -gt $remainingWidth) {
|
||||
$paddedValue = $Value.Substring(0, $remainingWidth - 3) + "..."
|
||||
}
|
||||
$totalPadding = $Width - $paddedLabel.Length - $paddedValue.Length - 2
|
||||
if ($totalPadding -lt 0) { $totalPadding = 0 }
|
||||
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText $paddedLabel -Color $LabelColor -NoNewline
|
||||
Write-ColorText $paddedValue -Color $ValueColor -NoNewline
|
||||
Write-ColorText (" " * $totalPadding) -Color White -NoNewline
|
||||
Write-ColorText " │" -Color White
|
||||
}
|
||||
|
||||
function Write-BoxLine {
|
||||
param(
|
||||
[string]$Text,
|
||||
[ConsoleColor]$Color = "White",
|
||||
[int]$Width = $script:BoxWidth,
|
||||
[int]$Indent = 1
|
||||
)
|
||||
|
||||
$indentStr = " " * $Indent
|
||||
$maxTextWidth = $Width - $Indent - 1
|
||||
$displayText = $Text
|
||||
if ($Text.Length -gt $maxTextWidth) {
|
||||
$displayText = $Text.Substring(0, $maxTextWidth - 3) + "..."
|
||||
}
|
||||
$padding = $Width - $Indent - $displayText.Length - 1
|
||||
if ($padding -lt 0) { $padding = 0 }
|
||||
|
||||
Write-ColorText " │" -Color White -NoNewline
|
||||
Write-ColorText $indentStr -Color White -NoNewline
|
||||
Write-ColorText $displayText -Color $Color -NoNewline
|
||||
Write-ColorText (" " * $padding) -Color White -NoNewline
|
||||
Write-ColorText " │" -Color White
|
||||
}
|
||||
|
||||
function Write-BoxLineMultiColor {
|
||||
param(
|
||||
[array]$Parts, # Array of @{Text=""; Color="White"}
|
||||
[int]$Width = $script:BoxWidth,
|
||||
[int]$Indent = 1
|
||||
)
|
||||
|
||||
$indentStr = " " * $Indent
|
||||
$totalLength = $Indent
|
||||
foreach ($part in $Parts) {
|
||||
$totalLength += $part.Text.Length
|
||||
}
|
||||
$padding = $Width - $totalLength - 1
|
||||
if ($padding -lt 0) { $padding = 0 }
|
||||
|
||||
Write-ColorText " │" -Color White -NoNewline
|
||||
Write-ColorText $indentStr -Color White -NoNewline
|
||||
foreach ($part in $Parts) {
|
||||
Write-ColorText $part.Text -Color $part.Color -NoNewline
|
||||
}
|
||||
Write-ColorText (" " * $padding) -Color White -NoNewline
|
||||
Write-ColorText " │" -Color White
|
||||
}
|
||||
|
||||
function Write-Banner {
|
||||
Clear-Host
|
||||
Write-Host ""
|
||||
Write-ColorText "╔═══════════════════════════════════════════════════════════════════════════╗" -Color Cyan
|
||||
Write-ColorText "║ ║" -Color Cyan
|
||||
Write-ColorText "║ ██████╗██╗ █████╗ ██╗ ██╗██████╗ ███████╗ ║" -Color Cyan
|
||||
Write-ColorText "║ ██╔════╝██║ ██╔══██╗██║ ██║██╔══██╗██╔════╝ ║" -Color Cyan
|
||||
Write-ColorText "║ ██║ ██║ ███████║██║ ██║██║ ██║█████╗ ║" -Color Cyan
|
||||
Write-ColorText "║ ██║ ██║ ██╔══██║██║ ██║██║ ██║██╔══╝ ║" -Color Cyan
|
||||
Write-ColorText "║ ╚██████╗███████╗██║ ██║╚██████╔╝██████╔╝███████╗ ║" -Color Cyan
|
||||
Write-ColorText "║ ╚═════╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚══════╝ ║" -Color Cyan
|
||||
Write-ColorText "║ ║" -Color Cyan
|
||||
Write-ColorText "║ " -Color Cyan -NoNewline
|
||||
Write-ColorText " ╔═══════════════════════════════════════════════════════════════════╗" -Color Cyan
|
||||
Write-ColorText " ║ ║" -Color Cyan
|
||||
Write-ColorText " ║ " -Color Cyan -NoNewline
|
||||
Write-ColorText "██████╗██╗ █████╗ ██╗ ██╗██████╗ ███████╗" -Color Cyan -NoNewline
|
||||
Write-ColorText " ║" -Color Cyan
|
||||
Write-ColorText " ║ " -Color Cyan -NoNewline
|
||||
Write-ColorText "██╔════╝██║ ██╔══██╗██║ ██║██╔══██╗██╔════╝" -Color Cyan -NoNewline
|
||||
Write-ColorText " ║" -Color Cyan
|
||||
Write-ColorText " ║ " -Color Cyan -NoNewline
|
||||
Write-ColorText "██║ ██║ ███████║██║ ██║██║ ██║█████╗" -Color Cyan -NoNewline
|
||||
Write-ColorText " ║" -Color Cyan
|
||||
Write-ColorText " ║ " -Color Cyan -NoNewline
|
||||
Write-ColorText "██║ ██║ ██╔══██║██║ ██║██║ ██║██╔══╝" -Color Cyan -NoNewline
|
||||
Write-ColorText " ║" -Color Cyan
|
||||
Write-ColorText " ║ " -Color Cyan -NoNewline
|
||||
Write-ColorText "╚██████╗███████╗██║ ██║╚██████╔╝██████╔╝███████╗" -Color Cyan -NoNewline
|
||||
Write-ColorText " ║" -Color Cyan
|
||||
Write-ColorText " ║ " -Color Cyan -NoNewline
|
||||
Write-ColorText "╚═════╝╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚══════╝" -Color Cyan -NoNewline
|
||||
Write-ColorText " ║" -Color Cyan
|
||||
Write-ColorText " ║ ║" -Color Cyan
|
||||
Write-ColorText " ║ " -Color Cyan -NoNewline
|
||||
Write-ColorText "C O D E I N S T A L L E R" -Color White -NoNewline
|
||||
Write-ColorText " ║" -Color Cyan
|
||||
Write-ColorText "║ ║" -Color Cyan
|
||||
Write-ColorText "║ " -Color Cyan -NoNewline
|
||||
Write-ColorText " ║" -Color Cyan
|
||||
Write-ColorText " ║ ║" -Color Cyan
|
||||
Write-ColorText " ║ " -Color Cyan -NoNewline
|
||||
Write-ColorText "[ Windows Edition ]" -Color Yellow -NoNewline
|
||||
Write-ColorText " ║" -Color Cyan
|
||||
Write-ColorText "║ ║" -Color Cyan
|
||||
Write-ColorText "╚═══════════════════════════════════════════════════════════════════════════╝" -Color Cyan
|
||||
Write-ColorText " ║" -Color Cyan
|
||||
Write-ColorText " ║ ║" -Color Cyan
|
||||
Write-ColorText " ╚═══════════════════════════════════════════════════════════════════╝" -Color Cyan
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
function Write-Section {
|
||||
param([string]$Title)
|
||||
Write-Host ""
|
||||
Write-ColorText "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -Color Blue
|
||||
Write-ColorText " $Title" -Color White
|
||||
Write-ColorText "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -Color Blue
|
||||
Write-ColorText " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -Color Blue
|
||||
Write-ColorText " $Title" -Color White
|
||||
Write-ColorText " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -Color Blue
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
function Write-Step {
|
||||
param([string]$Message)
|
||||
Write-ColorText "→ " -Color Cyan -NoNewline
|
||||
Write-ColorText " → " -Color Cyan -NoNewline
|
||||
Write-ColorText $Message -Color White
|
||||
}
|
||||
|
||||
function Write-Success {
|
||||
param([string]$Message)
|
||||
Write-ColorText "✓ " -Color Green -NoNewline
|
||||
Write-ColorText " ✓ " -Color Green -NoNewline
|
||||
Write-ColorText $Message -Color Green
|
||||
}
|
||||
|
||||
function Write-Error2 {
|
||||
param([string]$Message)
|
||||
Write-ColorText "✗ " -Color Red -NoNewline
|
||||
Write-ColorText " ✗ " -Color Red -NoNewline
|
||||
Write-ColorText $Message -Color Red
|
||||
}
|
||||
|
||||
function Write-Warning2 {
|
||||
param([string]$Message)
|
||||
Write-ColorText "⚠ " -Color Yellow -NoNewline
|
||||
Write-ColorText " ⚠ " -Color Yellow -NoNewline
|
||||
Write-ColorText $Message -Color Yellow
|
||||
}
|
||||
|
||||
function Write-Info {
|
||||
param([string]$Message)
|
||||
Write-ColorText "ℹ " -Color Blue -NoNewline
|
||||
Write-ColorText " ℹ " -Color Blue -NoNewline
|
||||
Write-ColorText $Message -Color DarkGray
|
||||
}
|
||||
|
||||
@@ -123,7 +256,7 @@ function Confirm-Action {
|
||||
$options = "[y/N]"
|
||||
}
|
||||
|
||||
Write-ColorText "? " -Color Yellow -NoNewline
|
||||
Write-ColorText " ? " -Color Yellow -NoNewline
|
||||
Write-ColorText "$Prompt " -Color White -NoNewline
|
||||
Write-ColorText $options -Color DarkGray -NoNewline
|
||||
Write-ColorText ": " -Color White -NoNewline
|
||||
@@ -139,7 +272,7 @@ function Confirm-Action {
|
||||
|
||||
function Wait-ForKey {
|
||||
Write-Host ""
|
||||
Write-ColorText "Press any key to continue..." -Color DarkGray
|
||||
Write-ColorText " Press any key to continue..." -Color DarkGray
|
||||
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
|
||||
Write-Host ""
|
||||
}
|
||||
@@ -184,37 +317,22 @@ function Get-SystemInfo {
|
||||
|
||||
# Display detected information
|
||||
Write-Host ""
|
||||
Write-ColorText " ┌─────────────────────────────────────────────────────────┐" -Color White
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "System Information" -Color White -NoNewline
|
||||
Write-ColorText " │" -Color White
|
||||
Write-ColorText " ├─────────────────────────────────────────────────────────┤" -Color White
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "Windows: " -Color Cyan -NoNewline
|
||||
Write-ColorText "$WindowsVersion" -Color Green
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "Build: " -Color Cyan -NoNewline
|
||||
Write-ColorText "$WindowsBuild" -Color Green
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "Architecture: " -Color Cyan -NoNewline
|
||||
Write-ColorText "$ArchDisplay" -Color Green
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "Computer: " -Color Cyan -NoNewline
|
||||
Write-ColorText "$ComputerName" -Color Green
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "RAM: " -Color Cyan -NoNewline
|
||||
Write-ColorText "$TotalRAM GB" -Color Green
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "PowerShell: " -Color Cyan -NoNewline
|
||||
Write-ColorText "v$PSVersion" -Color Green
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "Admin Rights: " -Color Cyan -NoNewline
|
||||
Write-BoxTop
|
||||
Write-BoxTitle -Title "System Information"
|
||||
Write-BoxMiddle
|
||||
Write-BoxContent -Label "Windows:" -Value $WindowsVersion
|
||||
Write-BoxContent -Label "Build:" -Value $WindowsBuild
|
||||
Write-BoxContent -Label "Architecture:" -Value $ArchDisplay
|
||||
Write-BoxContent -Label "Computer:" -Value $ComputerName
|
||||
Write-BoxContent -Label "RAM:" -Value "$TotalRAM GB"
|
||||
Write-BoxContent -Label "PowerShell:" -Value "v$PSVersion"
|
||||
|
||||
if ($IsAdmin) {
|
||||
Write-ColorText "Yes" -Color Green
|
||||
Write-BoxContent -Label "Admin Rights:" -Value "Yes" -ValueColor Green
|
||||
} else {
|
||||
Write-ColorText "No" -Color Yellow
|
||||
Write-BoxContent -Label "Admin Rights:" -Value "No" -ValueColor Yellow
|
||||
}
|
||||
Write-ColorText " └─────────────────────────────────────────────────────────┘" -Color White
|
||||
Write-BoxBottom
|
||||
Write-Host ""
|
||||
|
||||
Write-Success "System detected successfully!"
|
||||
@@ -261,11 +379,9 @@ function Test-NodeInstallation {
|
||||
|
||||
# Display current status
|
||||
Write-Host ""
|
||||
Write-ColorText " ┌─────────────────────────────────────────────────────────┐" -Color White
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "Current Installation Status" -Color White -NoNewline
|
||||
Write-ColorText " │" -Color White
|
||||
Write-ColorText " ├─────────────────────────────────────────────────────────┤" -Color White
|
||||
Write-BoxTop
|
||||
Write-BoxTitle -Title "Current Installation Status"
|
||||
Write-BoxMiddle
|
||||
|
||||
if ($NodeInstalled) {
|
||||
# Check if version is sufficient (need v18+)
|
||||
@@ -273,40 +389,45 @@ function Test-NodeInstallation {
|
||||
$majorVersion = [int]($versionNum.Split('.')[0])
|
||||
|
||||
if ($majorVersion -ge 18) {
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "✓" -Color Green -NoNewline
|
||||
Write-ColorText " Node.js: " -Color White -NoNewline
|
||||
Write-ColorText "$NodeVersion" -Color Green -NoNewline
|
||||
Write-ColorText " (Compatible)" -Color Green
|
||||
Write-BoxLineMultiColor -Parts @(
|
||||
@{Text="✓ "; Color="Green"},
|
||||
@{Text="Node.js: "; Color="White"},
|
||||
@{Text="$NodeVersion"; Color="Green"},
|
||||
@{Text=" (Compatible)"; Color="Green"}
|
||||
)
|
||||
} else {
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "⚠" -Color Yellow -NoNewline
|
||||
Write-ColorText " Node.js: " -Color White -NoNewline
|
||||
Write-ColorText "$NodeVersion" -Color Yellow -NoNewline
|
||||
Write-ColorText " (Needs upgrade to v18+)" -Color Yellow
|
||||
Write-BoxLineMultiColor -Parts @(
|
||||
@{Text="⚠ "; Color="Yellow"},
|
||||
@{Text="Node.js: "; Color="White"},
|
||||
@{Text="$NodeVersion"; Color="Yellow"},
|
||||
@{Text=" (Needs upgrade to v18+)"; Color="Yellow"}
|
||||
)
|
||||
$script:NeedsUpgrade = $true
|
||||
}
|
||||
} else {
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "✗" -Color Red -NoNewline
|
||||
Write-ColorText " Node.js: " -Color White -NoNewline
|
||||
Write-ColorText "Not installed" -Color Red
|
||||
Write-BoxLineMultiColor -Parts @(
|
||||
@{Text="✗ "; Color="Red"},
|
||||
@{Text="Node.js: "; Color="White"},
|
||||
@{Text="Not installed"; Color="Red"}
|
||||
)
|
||||
$script:NeedsUpgrade = $true
|
||||
}
|
||||
|
||||
if ($NpmInstalled) {
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "✓" -Color Green -NoNewline
|
||||
Write-ColorText " npm: " -Color White -NoNewline
|
||||
Write-ColorText "v$NpmVersion" -Color Green
|
||||
Write-BoxLineMultiColor -Parts @(
|
||||
@{Text="✓ "; Color="Green"},
|
||||
@{Text="npm: "; Color="White"},
|
||||
@{Text="v$NpmVersion"; Color="Green"}
|
||||
)
|
||||
} else {
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "✗" -Color Red -NoNewline
|
||||
Write-ColorText " npm: " -Color White -NoNewline
|
||||
Write-ColorText "Not installed" -Color Red
|
||||
Write-BoxLineMultiColor -Parts @(
|
||||
@{Text="✗ "; Color="Red"},
|
||||
@{Text="npm: "; Color="White"},
|
||||
@{Text="Not installed"; Color="Red"}
|
||||
)
|
||||
}
|
||||
|
||||
Write-ColorText " └─────────────────────────────────────────────────────────┘" -Color White
|
||||
Write-BoxBottom
|
||||
Write-Host ""
|
||||
|
||||
# Determine action needed
|
||||
@@ -357,7 +478,7 @@ function Uninstall-Node {
|
||||
)
|
||||
|
||||
# Try to uninstall via Windows installer
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText "Checking for installed Node.js package..." -Color White
|
||||
|
||||
$uninstallKeys = @(
|
||||
@@ -375,7 +496,7 @@ function Uninstall-Node {
|
||||
}
|
||||
|
||||
if ($nodePackage -and $nodePackage.UninstallString) {
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText "Found Node.js installation. Uninstalling..." -Color White
|
||||
|
||||
try {
|
||||
@@ -398,7 +519,7 @@ function Uninstall-Node {
|
||||
# Remove Node.js directories
|
||||
foreach ($path in $nodePaths) {
|
||||
if (Test-Path $path) {
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText "Removing $path..." -Color White -NoNewline
|
||||
try {
|
||||
Remove-Item -Path $path -Recurse -Force -ErrorAction Stop
|
||||
@@ -418,7 +539,7 @@ function Uninstall-Node {
|
||||
|
||||
foreach ($path in $npmPaths) {
|
||||
if (Test-Path $path) {
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText "Removing $path..." -Color White -NoNewline
|
||||
try {
|
||||
Remove-Item -Path $path -Recurse -Force -ErrorAction Stop
|
||||
@@ -456,15 +577,15 @@ function Install-Node {
|
||||
$downloadUrl = "https://nodejs.org/dist/v$nodeVersion/$installerFile"
|
||||
$installerPath = "$env:TEMP\$installerFile"
|
||||
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText "Downloading Node.js v$nodeVersion ($Arch)..." -Color White
|
||||
Write-Info " URL: $downloadUrl"
|
||||
Write-Info " URL: $downloadUrl"
|
||||
|
||||
try {
|
||||
# Download with progress
|
||||
$webClient = New-Object System.Net.WebClient
|
||||
$webClient.DownloadFile($downloadUrl, $installerPath)
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText "Download complete!" -Color Green
|
||||
} catch {
|
||||
Write-Error2 "Failed to download Node.js installer."
|
||||
@@ -475,7 +596,7 @@ function Install-Node {
|
||||
|
||||
# Install Node.js
|
||||
Write-Host ""
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText "Installing Node.js (this may take a minute)..." -Color White
|
||||
|
||||
try {
|
||||
@@ -483,10 +604,10 @@ function Install-Node {
|
||||
$process = Start-Process "msiexec.exe" -ArgumentList $installArgs -Wait -PassThru -NoNewWindow
|
||||
|
||||
if ($process.ExitCode -eq 0) {
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText "Installation successful!" -Color Green
|
||||
} elseif ($process.ExitCode -eq 3010) {
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText "Installation successful (restart may be required)" -Color Yellow
|
||||
} else {
|
||||
throw "MSI installer returned code: $($process.ExitCode)"
|
||||
@@ -498,7 +619,7 @@ function Install-Node {
|
||||
}
|
||||
|
||||
# Refresh environment variables
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText "Refreshing environment variables..." -Color White
|
||||
|
||||
# Add Node.js to PATH for current session
|
||||
@@ -515,7 +636,7 @@ function Install-Node {
|
||||
Write-ColorText " done" -Color Green
|
||||
|
||||
# Cleanup
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText "Cleaning up installer..." -Color White -NoNewline
|
||||
Remove-Item -Path $installerPath -Force -ErrorAction SilentlyContinue
|
||||
Write-ColorText " done" -Color Green
|
||||
@@ -553,13 +674,13 @@ function Test-NodeVerification {
|
||||
$majorVersion = [int]($versionNum.Split('.')[0])
|
||||
|
||||
if ($majorVersion -ge 18) {
|
||||
Write-ColorText " ✓ " -Color Green -NoNewline
|
||||
Write-ColorText " ✓ " -Color Green -NoNewline
|
||||
Write-ColorText "Node.js: " -Color White -NoNewline
|
||||
Write-ColorText "$newNodeVersion" -Color Green -NoNewline
|
||||
Write-ColorText " (Compatible!)" -Color Green
|
||||
$nodeOk = $true
|
||||
} else {
|
||||
Write-ColorText " ✗ " -Color Red -NoNewline
|
||||
Write-ColorText " ✗ " -Color Red -NoNewline
|
||||
Write-ColorText "Node.js: " -Color White -NoNewline
|
||||
Write-ColorText "$newNodeVersion (Too old - need v18+)" -Color Red
|
||||
}
|
||||
@@ -567,7 +688,7 @@ function Test-NodeVerification {
|
||||
throw "No version output"
|
||||
}
|
||||
} catch {
|
||||
Write-ColorText " ✗ " -Color Red -NoNewline
|
||||
Write-ColorText " ✗ " -Color Red -NoNewline
|
||||
Write-ColorText "Node.js: " -Color White -NoNewline
|
||||
Write-ColorText "Not found!" -Color Red
|
||||
}
|
||||
@@ -580,7 +701,7 @@ function Test-NodeVerification {
|
||||
}
|
||||
|
||||
if ($newNpmVersion) {
|
||||
Write-ColorText " ✓ " -Color Green -NoNewline
|
||||
Write-ColorText " ✓ " -Color Green -NoNewline
|
||||
Write-ColorText "npm: " -Color White -NoNewline
|
||||
Write-ColorText "v$newNpmVersion" -Color Green
|
||||
$npmOk = $true
|
||||
@@ -588,7 +709,7 @@ function Test-NodeVerification {
|
||||
throw "No version output"
|
||||
}
|
||||
} catch {
|
||||
Write-ColorText " ✗ " -Color Red -NoNewline
|
||||
Write-ColorText " ✗ " -Color Red -NoNewline
|
||||
Write-ColorText "npm: " -Color White -NoNewline
|
||||
Write-ColorText "Not found!" -Color Red
|
||||
}
|
||||
@@ -624,7 +745,7 @@ function Install-ClaudeCode {
|
||||
$npmPath = "$env:APPDATA\npm"
|
||||
$env:Path = "$nodePath;$npmPath;$env:Path"
|
||||
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText " → " -Color Yellow -NoNewline
|
||||
Write-ColorText "Running npm install..." -Color White
|
||||
Write-Host ""
|
||||
|
||||
@@ -640,11 +761,11 @@ function Install-ClaudeCode {
|
||||
if ($output) {
|
||||
$output.Split("`n") | ForEach-Object {
|
||||
if ($_ -match "added|packages") {
|
||||
Write-ColorText " $_" -Color Green
|
||||
Write-ColorText " $_" -Color Green
|
||||
} elseif ($_ -match "WARN") {
|
||||
Write-ColorText " $_" -Color Yellow
|
||||
Write-ColorText " $_" -Color Yellow
|
||||
} elseif ($_.Trim()) {
|
||||
Write-ColorText " $_" -Color DarkGray
|
||||
Write-ColorText " $_" -Color DarkGray
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -656,9 +777,9 @@ function Install-ClaudeCode {
|
||||
if ($errOutput -and $errOutput.Trim()) {
|
||||
$errOutput.Split("`n") | ForEach-Object {
|
||||
if ($_ -match "ERR|error") {
|
||||
Write-ColorText " $_" -Color Red
|
||||
Write-ColorText " $_" -Color Red
|
||||
} elseif ($_ -match "WARN") {
|
||||
Write-ColorText " $_" -Color Yellow
|
||||
Write-ColorText " $_" -Color Yellow
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -706,54 +827,58 @@ function Set-ClaudePermissions {
|
||||
|
||||
Write-Host " Claude Code can run with different permission levels:"
|
||||
Write-Host ""
|
||||
Write-ColorText " ┌─────────────────────────────────────────────────────────────────────┐" -Color White
|
||||
Write-ColorText " │ │" -Color White
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "1." -Color Cyan -NoNewline
|
||||
Write-ColorText " Normal Mode" -Color White -NoNewline
|
||||
Write-ColorText " (Recommended for most users) │" -Color DarkGray
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "Claude will ask permission before file edits and commands" -Color DarkGray -NoNewline
|
||||
Write-ColorText " │" -Color White
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "✓ Safe ✓ Interactive ✓ Full control" -Color Green -NoNewline
|
||||
Write-ColorText " │" -Color White
|
||||
Write-ColorText " │ │" -Color White
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "2." -Color Cyan -NoNewline
|
||||
Write-ColorText " Auto-Accept Edits" -Color White -NoNewline
|
||||
Write-ColorText " │" -Color White
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "Automatically accept file edits, ask for commands" -Color DarkGray -NoNewline
|
||||
Write-ColorText " │" -Color White
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "⚡ Faster editing ✓ Command safety" -Color Yellow -NoNewline
|
||||
Write-ColorText " │" -Color White
|
||||
Write-ColorText " │ │" -Color White
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "3." -Color Cyan -NoNewline
|
||||
Write-ColorText " Full Auto Mode" -Color White -NoNewline
|
||||
Write-ColorText " (--dangerously-skip-permissions) │" -Color DarkGray
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "Skip all permission prompts (use with caution!)" -Color DarkGray -NoNewline
|
||||
Write-ColorText " │" -Color White
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "⚠ No confirmations ⚠ Full system access" -Color Red -NoNewline
|
||||
Write-ColorText " │" -Color White
|
||||
Write-ColorText " │ │" -Color White
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "4." -Color Cyan -NoNewline
|
||||
Write-ColorText " Don't start Claude" -Color White -NoNewline
|
||||
Write-ColorText " │" -Color White
|
||||
Write-ColorText " │ " -Color White -NoNewline
|
||||
Write-ColorText "Exit installer without starting Claude" -Color DarkGray -NoNewline
|
||||
Write-ColorText " │" -Color White
|
||||
Write-ColorText " │ │" -Color White
|
||||
Write-ColorText " └─────────────────────────────────────────────────────────────────────┘" -Color White
|
||||
|
||||
Write-BoxTop
|
||||
Write-BoxEmpty
|
||||
|
||||
# Option 1 - Normal Mode
|
||||
Write-BoxLineMultiColor -Parts @(
|
||||
@{Text="1."; Color="Cyan"},
|
||||
@{Text=" Normal Mode"; Color="White"},
|
||||
@{Text=" (Recommended for most users)"; Color="DarkGray"}
|
||||
)
|
||||
Write-BoxLine -Text "Claude will ask permission before file edits and commands" -Color DarkGray -Indent 4
|
||||
Write-BoxLineMultiColor -Parts @(
|
||||
@{Text="✓ Safe ✓ Interactive ✓ Full control"; Color="Green"}
|
||||
) -Indent 4
|
||||
Write-BoxEmpty
|
||||
|
||||
# Option 2 - Auto-Accept Edits
|
||||
Write-BoxLineMultiColor -Parts @(
|
||||
@{Text="2."; Color="Cyan"},
|
||||
@{Text=" Auto-Accept Edits"; Color="White"}
|
||||
)
|
||||
Write-BoxLine -Text "Automatically accept file edits, ask for commands" -Color DarkGray -Indent 4
|
||||
Write-BoxLineMultiColor -Parts @(
|
||||
@{Text="⚡ Faster editing ✓ Command safety"; Color="Yellow"}
|
||||
) -Indent 4
|
||||
Write-BoxEmpty
|
||||
|
||||
# Option 3 - Full Auto Mode
|
||||
Write-BoxLineMultiColor -Parts @(
|
||||
@{Text="3."; Color="Cyan"},
|
||||
@{Text=" Full Auto Mode"; Color="White"},
|
||||
@{Text=" (--dangerously-skip-permissions)"; Color="DarkGray"}
|
||||
)
|
||||
Write-BoxLine -Text "Skip all permission prompts (use with caution!)" -Color DarkGray -Indent 4
|
||||
Write-BoxLineMultiColor -Parts @(
|
||||
@{Text="⚠ No confirmations ⚠ Full system access"; Color="Red"}
|
||||
) -Indent 4
|
||||
Write-BoxEmpty
|
||||
|
||||
# Option 4 - Don't start
|
||||
Write-BoxLineMultiColor -Parts @(
|
||||
@{Text="4."; Color="Cyan"},
|
||||
@{Text=" Don't start Claude"; Color="White"}
|
||||
)
|
||||
Write-BoxLine -Text "Exit installer without starting Claude" -Color DarkGray -Indent 4
|
||||
Write-BoxEmpty
|
||||
|
||||
Write-BoxBottom
|
||||
Write-Host ""
|
||||
|
||||
while ($true) {
|
||||
Write-ColorText "? " -Color Yellow -NoNewline
|
||||
Write-ColorText " ? " -Color Yellow -NoNewline
|
||||
Write-ColorText "Select permission mode [" -Color White -NoNewline
|
||||
Write-ColorText "1" -Color Green -NoNewline
|
||||
Write-ColorText "/" -Color White -NoNewline
|
||||
@@ -783,11 +908,10 @@ function Set-ClaudePermissions {
|
||||
$script:PermissionMode = "full-auto"
|
||||
Write-Host ""
|
||||
Write-Warning2 "⚠️ WARNING: Full Auto Mode gives Claude unrestricted access!"
|
||||
Write-ColorText " " -Color White -NoNewline
|
||||
Write-ColorText "This mode will:" -Color Red
|
||||
Write-ColorText " • Execute commands without confirmation" -Color Red
|
||||
Write-ColorText " • Modify files without asking" -Color Red
|
||||
Write-ColorText " • Have full access to your system" -Color Red
|
||||
Write-ColorText " This mode will:" -Color Red
|
||||
Write-ColorText " • Execute commands without confirmation" -Color Red
|
||||
Write-ColorText " • Modify files without asking" -Color Red
|
||||
Write-ColorText " • Have full access to your system" -Color Red
|
||||
Write-Host ""
|
||||
|
||||
if (Confirm-Action "Are you sure you want to use Full Auto Mode?" -DefaultYes $false) {
|
||||
@@ -825,9 +949,9 @@ function Start-Claude {
|
||||
Write-ColorText " To start Claude Code, open a new terminal and run:" -Color White
|
||||
Write-Host ""
|
||||
Write-ColorText " claude" -Color Cyan -NoNewline
|
||||
Write-ColorText " # Normal mode" -Color DarkGray
|
||||
Write-ColorText " # Normal mode" -Color DarkGray
|
||||
Write-ColorText " claude --auto-accept-edits" -Color Cyan -NoNewline
|
||||
Write-ColorText " # Auto-accept file edits" -Color DarkGray
|
||||
Write-ColorText " # Auto-accept file edits" -Color DarkGray
|
||||
Write-ColorText " claude --dangerously-skip-permissions" -Color Cyan -NoNewline
|
||||
Write-ColorText " # Full auto mode" -Color DarkGray
|
||||
Write-Host ""
|
||||
@@ -842,7 +966,7 @@ function Start-Claude {
|
||||
Write-ColorText " Starting Claude Code with: " -Color White -NoNewline
|
||||
Write-ColorText $ClaudeCmd -Color Cyan
|
||||
Write-Host ""
|
||||
Write-ColorText " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -Color DarkGray
|
||||
Write-ColorText " ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" -Color DarkGray
|
||||
Write-Host ""
|
||||
|
||||
Start-Sleep -Seconds 1
|
||||
@@ -912,4 +1036,4 @@ function Main {
|
||||
}
|
||||
|
||||
# Run main function
|
||||
Main
|
||||
Main
|
||||
Reference in New Issue
Block a user