# # File: claude.ps1 # Description: Claude CLI wrapper functions for various backends # Created: 2026-01-21 16:00:00 # Updated: 2026-01-29 10:45:00 # function ccc { param ([Parameter(Position=0, ValueFromRemainingArguments=$true)][string[]]$UserArgs) $defaultFile = "$HOME\.claude\settings.json" $selected = $env:CLAUDE_DEFAULT # 完全靠环境变量控制默认(可为空) $actualArgs = @() $i = 0 # 第一参数:支持 modelscope / -modelscope / -anything if ($UserArgs.Count -gt 0) { $first = $UserArgs[0] if ($first -match '^-?(.+)') { $selected = $matches[1] $i = 1 } } for (; $i -lt $UserArgs.Count; $i++) { $actualArgs += $UserArgs[$i] } # ============ 超级详细日志 ============ Write-Host "========== ccc 日志 ==========" -ForegroundColor DarkGray Write-Host "你输入的完整参数: $($UserArgs -join ' ')" -ForegroundColor Gray Write-Host "识别到的后缀: $selected" -ForegroundColor Gray Write-Host "环境变量默认后缀: '$env:CLAUDE_DEFAULT'" -ForegroundColor Gray $settingsFile = $null $log = "" if ($selected) { # 查找: settings.name.json $candidate = "$HOME\.claude\settings.$selected.json" if (Test-Path $candidate) { $settingsFile = $candidate $log = "成功加载专用配置 → $settingsFile" } else { $log = "专用配置不存在 → $candidate" } } else { $log = "未指定后缀" } if (-not $settingsFile -and (Test-Path $defaultFile)) { $settingsFile = $defaultFile $log += " → 回退到默认配置 → $defaultFile" } elseif (-not $settingsFile) { $log += " → 无任何配置文件,将直接运行 claude(无 --settings 参数)" } Write-Host $log -ForegroundColor Yellow Write-Host "最终实际使用的配置文件: $($settingsFile ? $settingsFile : '无')" -ForegroundColor Green Write-Host "===============================" -ForegroundColor DarkGray # ====================================== $baseCmd = @('claude') if ($settingsFile) { $baseCmd += '--settings', $settingsFile } if ($actualArgs.Count -gt 0) { # 一次性发送 $cmd = $baseCmd + $actualArgs $cmdStr = $cmd | ForEach-Object { '"{0}"' -f $_ } Write-Host "Executing → $cmdStr" -ForegroundColor White if ($settingsFile) { & claude --settings $settingsFile @actualArgs } else { & claude @actualArgs } } else { # 交互模式 Write-Host "进入交互模式(按 Ctrl+C 退出)" -ForegroundColor White if ($settingsFile) { & claude --settings $settingsFile } else { & claude } } } function Check-ServiceDate { param ( [string]$ServiceName, [string]$CutoffDate ) $currentDate = Get-Date -Format "yyyyMMdd" if ([int]$currentDate -gt [int]$CutoffDate) { $y = $CutoffDate.Substring(0,4) $m = $CutoffDate.Substring(4,2) $d = $CutoffDate.Substring(6,2) Write-Error "错误:$ServiceName 服务已于 ${y}年${m}月${d}日停止服务,此函数已禁用。" return $false } return $true } function claude-modelscope { $env:ANTHROPIC_AUTH_TOKEN = $env:MODELSCOPE_API_KEY ccc modelscope @args } function claude-streamlake { $env:ANTHROPIC_AUTH_TOKEN = $env:STREAMLAKE_API_KEY ccc streamlake @args } function claude-router { $env:ANTHROPIC_AUTH_TOKEN = $env:ROUTER_API_KEY ccc router @args } function claude-openrouter { $env:ANTHROPIC_AUTH_TOKEN = $env:OPENROUTER_API_KEY ccc openrouter @args } function claude-minimax { if (-not (Check-ServiceDate -ServiceName "minimax" -CutoffDate "20251107")) { return } $env:ANTHROPIC_AUTH_TOKEN = $env:MINIMAX_API_KEY ccc minimax @args } function claude-mimo { if (-not (Check-ServiceDate -ServiceName "mimo" -CutoffDate "20260120")) { return } $env:ANTHROPIC_AUTH_TOKEN = $env:MIMO_API_KEY ccc mimo @args } function claude-longcat { $env:ANTHROPIC_AUTH_TOKEN = $env:LONGCAT_API_KEY ccc longcat @args } function claude-aiping { if (-not (Check-ServiceDate -ServiceName "aiping" -CutoffDate "20260109")) { return } $env:ANTHROPIC_AUTH_TOKEN = $env:AIPING_API_KEY ccc aiping @args } function claude-litellm { $env:ANTHROPIC_AUTH_TOKEN = $env:LITELLM_API_KEY ccc litellm @args } function claude-mylitellm { $env:ANTHROPIC_AUTH_TOKEN = $env:MYLITELLM_API_KEY ccc mylitellm @args } function claude-aihubmix { $env:ANTHROPIC_API_KEY = $env:AIHUBMIX_API_KEY ccc aihubmix @args }