# Kailoo · OpenAI Codex CLI 一键配置(境内直连 · 走 kailoo.ai 反代) # 用法:irm https://kailoo.ai/install/kailoo-codex-setup.ps1 | iex # 或(防 BOM/记事本坑)双击 kailoo-codex.bat # 干的事:装 Node(如缺) + 装 @openai/codex + 写 ~/.codex/config.toml 的 kailoo provider # + 设 KAILOO_API_KEY 环境变量 + 连通性自测。全 ASCII echo 避免控制台码页乱码。 $ErrorActionPreference = 'Stop' $BASE_URL = 'https://kailoo.ai/v1' $MODEL = 'gpt-5.5' function Write-Ok ($m) { Write-Host " [OK] $m" -ForegroundColor Green } function Write-Warn($m) { Write-Host " [!] $m" -ForegroundColor Yellow } function Write-Err ($m) { Write-Host " [X] $m" -ForegroundColor Red } Write-Host '' Write-Host ' ============================================' Write-Host ' Kailoo - OpenAI Codex CLI 一键配置' Write-Host ' ============================================' Write-Host ' 国内直连 · 走 kailoo.ai 反代 · 免翻墙' Write-Host '' # ── 1. Node(codex 依赖)─────────────────────────────────────────────── $node = Get-Command node -ErrorAction SilentlyContinue if (-not $node) { Write-Warn 'Node.js 未安装,正在装 LTS(winget)...' try { & winget install -e --id OpenJS.NodeJS.LTS --silent --accept-source-agreements --accept-package-agreements | Out-Null } catch { Write-Err '自动装 Node 失败,请手动装 https://nodejs.org/ 后重跑本脚本'; return } $env:Path = [Environment]::GetEnvironmentVariable('Path','Machine') + ';' + [Environment]::GetEnvironmentVariable('Path','User') Write-Ok 'Node 安装完成' } else { Write-Ok "Node 已装($(& node -v))" } # ── 2. Codex CLI ────────────────────────────────────────────────────── $codex = Get-Command codex -ErrorAction SilentlyContinue if (-not $codex) { Write-Host ' 安装 OpenAI Codex CLI(npm -g @openai/codex)...' & npm install -g '@openai/codex' | Out-Null $env:Path = [Environment]::GetEnvironmentVariable('Path','User') + ';' + $env:Path Write-Ok 'Codex CLI 安装完成' } else { Write-Ok "Codex CLI 已装" } # ── 3. Kailoo Key ───────────────────────────────────────────────────── Write-Host '' $key = (Read-Host ' 粘贴你的 Kailoo API Key(zk_ 开头)').Trim() if ([string]::IsNullOrWhiteSpace($key)) { Write-Err 'Key 不能为空'; return } # ── 4. 写 ~/.codex/config.toml 的 kailoo provider(保留现有配置)────────── $codexDir = Join-Path $env:USERPROFILE '.codex' if (-not (Test-Path $codexDir)) { New-Item -ItemType Directory -Path $codexDir -Force | Out-Null } $cfg = Join-Path $codexDir 'config.toml' # 根键(model / model_provider)必须在任何 [table] 之前,否则会变成上一个表的成员。 $rootKeys = "model = `"$MODEL`"`r`nmodel_provider = `"kailoo`"" $tableBlock = @" [model_providers.kailoo] name = "Kailoo Relay" base_url = "$BASE_URL" env_key = "KAILOO_API_KEY" wire_api = "responses" "@ if (Test-Path $cfg) { Copy-Item $cfg "$cfg.bak-kailoo" -Force $existing = Get-Content $cfg -Raw if ($existing -match 'model_providers\.kailoo') { Write-Warn "config.toml 已有 kailoo provider,跳过(备份 .bak-kailoo)" } else { # 剥掉已有的 model / model_provider 根键行,避免重复;再把新根键 prepend 到顶,表 append 到尾。 $stripped = ($existing -split "`r?`n" | Where-Object { $_ -notmatch '^\s*model\s*=' -and $_ -notmatch '^\s*model_provider\s*=' }) -join "`r`n" $newContent = "$rootKeys`r`n`r`n$stripped`r`n`r`n$tableBlock" Set-Content -Path $cfg -Value $newContent -Encoding UTF8 Write-Ok "已配 kailoo provider(根键置顶·表置尾·原配置备份 .bak-kailoo)" } } else { Set-Content -Path $cfg -Value "$rootKeys`r`n`r`n$tableBlock" -Encoding UTF8 Write-Ok "已写入 $cfg" } # ── 5. 环境变量 KAILOO_API_KEY ──────────────────────────────────────── & setx KAILOO_API_KEY $key | Out-Null $env:KAILOO_API_KEY = $key Write-Ok '已设置 KAILOO_API_KEY(持久 + 当前会话)' # ── 6. 连通性自测(打 kailoo /v1/models)────────────────────────────── Write-Host '' Write-Host ' 连通性自测...' try { $r = Invoke-WebRequest -UseBasicParsing "$BASE_URL/models" -Headers @{ Authorization = "Bearer $key" } -TimeoutSec 20 if ($r.StatusCode -eq 200) { Write-Ok '连通正常,Kailoo Codex 配置完成' } else { Write-Warn "返回 $($r.StatusCode),key 或网络可能有问题" } } catch { $code = $_.Exception.Response.StatusCode.value__ if ($code -eq 401) { Write-Err 'Key 无效(401),请核对 Kailoo API Key' } elseif ($code -eq 503) { Write-Warn '密钥有效但当前无可用渠道(服务端暂时缺后端),稍后再试' } else { Write-Warn "自测异常:$($_.Exception.Message)(不一定影响使用)" } } Write-Host '' Write-Host ' 完成。用法:' -ForegroundColor Cyan Write-Host ' codex # 交互式' Write-Host ' codex exec "帮我改这个bug" # 一次性' Write-Host ' 切回官方 ChatGPT login:注释 ~/.codex/config.toml 里 model_provider 一行。' Write-Host ' 遇到问题:support@kailoo.ai' -ForegroundColor DarkGray Write-Host ''