添加 setup.ps1,使用 Get-Command 检测 claude、gemini、codex 是否已安装, 显示安装状态后启动对应的配置脚本。 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
93 lines
3.4 KiB
PowerShell
93 lines
3.4 KiB
PowerShell
# XCodeCLI Setup Launcher (Windows)
|
|
# Interactive script to configure Claude Code, Gemini CLI, or Codex
|
|
|
|
param(
|
|
[string]$ApiKey,
|
|
[switch]$Help
|
|
)
|
|
|
|
if (-not $ApiKey -and (Test-Path Variable:key)) { $ApiKey = $key }
|
|
|
|
function Write-Info { param([string]$Message); Write-Host "[INFO]" -ForegroundColor Blue -NoNewline; Write-Host " $Message" }
|
|
function Write-Success { param([string]$Message); Write-Host "[SUCCESS]" -ForegroundColor Green -NoNewline; Write-Host " $Message" }
|
|
function Write-Warning { param([string]$Message); Write-Host "[WARNING]" -ForegroundColor Yellow -NoNewline; Write-Host " $Message" }
|
|
function Write-Error { param([string]$Message); Write-Host "[ERROR]" -ForegroundColor Red -NoNewline; Write-Host " $Message" }
|
|
|
|
function Show-Help {
|
|
Write-Host @"
|
|
XCodeCLI Setup Launcher (Windows)
|
|
|
|
Usage: powershell -ExecutionPolicy Bypass -File setup.ps1 [OPTIONS]
|
|
|
|
Options:
|
|
-ApiKey <KEY> Pre-set the API key
|
|
-Help Show this help message
|
|
"@
|
|
exit 0
|
|
}
|
|
|
|
function Test-Command { param([string]$Name); return [bool](Get-Command $Name -ErrorAction SilentlyContinue) }
|
|
|
|
function Show-Menu {
|
|
$claudeStatus = if (Test-Command "claude") { "[已安装]" } else { "[未安装]" }
|
|
$geminiStatus = if (Test-Command "gemini") { "[已安装]" } else { "[未安装]" }
|
|
$codexStatus = if (Test-Command "codex") { "[已安装]" } else { "[未安装]" }
|
|
|
|
Write-Host ""
|
|
Write-Host "========================================" -ForegroundColor Cyan
|
|
Write-Host " XCodeCLI Setup Launcher" -ForegroundColor Cyan
|
|
Write-Host "========================================" -ForegroundColor Cyan
|
|
Write-Host ""
|
|
Write-Host "Select the tool to configure:" -ForegroundColor Yellow
|
|
Write-Host ""
|
|
|
|
$claudeColor = if (Test-Command "claude") { "Green" } else { "Red" }
|
|
$geminiColor = if (Test-Command "gemini") { "Green" } else { "Red" }
|
|
$codexColor = if (Test-Command "codex") { "Green" } else { "Red" }
|
|
|
|
Write-Host " [1] Claude Code " -NoNewline; Write-Host $claudeStatus -ForegroundColor $claudeColor
|
|
Write-Host " [2] Gemini CLI " -NoNewline; Write-Host $geminiStatus -ForegroundColor $geminiColor
|
|
Write-Host " [3] Codex " -NoNewline; Write-Host $codexStatus -ForegroundColor $codexColor
|
|
Write-Host ""
|
|
Write-Host " [0] Exit" -ForegroundColor Gray
|
|
Write-Host ""
|
|
}
|
|
|
|
function Get-ScriptPath {
|
|
param([int]$Choice)
|
|
$scriptDir = if ($PSScriptRoot) { $PSScriptRoot } else { "." }
|
|
|
|
switch ($Choice) {
|
|
1 { @("$scriptDir\ClaudeCode\setup-claude-code.ps1", "$scriptDir\setup-claude-code.ps1") | Where-Object { Test-Path $_ } | Select-Object -First 1 }
|
|
2 { "$scriptDir\GeminiCLI\setup-gemini.ps1" }
|
|
3 { "$scriptDir\codex\setup-codex.ps1" }
|
|
}
|
|
}
|
|
|
|
function Main {
|
|
if ($Help) { Show-Help }
|
|
|
|
Show-Menu
|
|
$choice = Read-Host "Enter your choice (0-3)"
|
|
|
|
if ($choice -eq "0") { Write-Info "Goodbye!"; exit 0 }
|
|
|
|
$choiceNum = [int]$choice
|
|
if ($choiceNum -lt 1 -or $choiceNum -gt 3) { Write-Error "Invalid choice."; exit 1 }
|
|
|
|
$scriptPath = Get-ScriptPath -Choice $choiceNum
|
|
if (-not $scriptPath -or -not (Test-Path $scriptPath)) {
|
|
$toolNames = @{ 1 = "Claude Code"; 2 = "Gemini CLI"; 3 = "Codex" }
|
|
Write-Error "Setup script for $($toolNames[$choiceNum]) not found."
|
|
exit 1
|
|
}
|
|
|
|
Write-Host ""
|
|
Write-Info "Launching: $scriptPath"
|
|
Write-Host ""
|
|
|
|
if ($ApiKey) { & $scriptPath -ApiKey $ApiKey } else { & $scriptPath }
|
|
}
|
|
|
|
Main
|