feat: 添加 Windows 交互式启动脚本
添加 setup.ps1,使用 Get-Command 检测 claude、gemini、codex 是否已安装, 显示安装状态后启动对应的配置脚本。 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
92
setup.ps1
Normal file
92
setup.ps1
Normal file
@@ -0,0 +1,92 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user