# setup-bot-env.ps1 # Set Windows User-scope env vars для autonomous multi-agent workflow. # # Запускается ОДИН РАЗ на каждой машине пользователя. Не нужен admin. # Effect: 7 User-scope env vars persistent в registry. # # Где взять токены: # 1. Vault meta/00_credentials.md (sensitive, не в git) — секция "Forgejo bot-users" # 2. Или сгенерировать новые: см. там же секция "Rotation / revocation" # # Безопасность: # - Скрипт ожидает чтобы ты ВПИСАЛ tokens сам перед запуском (placeholder ниже) # - НЕ коммить скрипт с реальными токенами! # - После запуска env vars в registry — можешь удалить локальную копию # ────────────────────────────────────────────────────────────────────── # REPLACE PLACEHOLDERS BELOW WITH ACTUAL TOKENS FROM VAULT # ────────────────────────────────────────────────────────────────────── $tokens = @{ "FORGEJO_TOKEN_ANALYST" = "REPLACE_ME_FROM_VAULT" "FORGEJO_TOKEN_BACKEND" = "REPLACE_ME_FROM_VAULT" "FORGEJO_TOKEN_FRONTEND" = "REPLACE_ME_FROM_VAULT" "FORGEJO_TOKEN_REVIEWER" = "REPLACE_ME_FROM_VAULT" "FORGEJO_TOKEN_QA" = "REPLACE_ME_FROM_VAULT" "FORGEJO_URL_BOTS" = "https://git.gendsgn.ru" "FORGEJO_REPO_BOTS" = "lekss361/gendesign" } # ────────────────────────────────────────────────────────────────────── # Validation # ────────────────────────────────────────────────────────────────────── $placeholderCount = ($tokens.Values | Where-Object { $_ -eq "REPLACE_ME_FROM_VAULT" }).Count if ($placeholderCount -gt 0) { Write-Error "❌ $placeholderCount placeholders не заменены. Открой vault meta/00_credentials.md, секция 'Forgejo bot-users', и вставь реальные PAT'ы вместо REPLACE_ME_FROM_VAULT." exit 1 } # ────────────────────────────────────────────────────────────────────── # Apply # ────────────────────────────────────────────────────────────────────── Write-Host "=== Setting 7 User-scope env vars (persistent) ===" -ForegroundColor Cyan foreach ($k in $tokens.Keys) { [System.Environment]::SetEnvironmentVariable($k, $tokens[$k], "User") Set-Item -Path "env:$k" -Value $tokens[$k] if ($k -like "FORGEJO_TOKEN_*") { $suffix = $tokens[$k].Substring($tokens[$k].Length - 4) Write-Host " $k = ****$suffix" } else { Write-Host " $k = $($tokens[$k])" } } # ────────────────────────────────────────────────────────────────────── # Verify # ────────────────────────────────────────────────────────────────────── Write-Host "" Write-Host "=== Verify (read back from User scope) ===" -ForegroundColor Cyan $allOK = $true foreach ($k in $tokens.Keys) { $stored = [System.Environment]::GetEnvironmentVariable($k, "User") if ($stored -eq $tokens[$k]) { Write-Host " $k`: OK (len=$($stored.Length))" } else { Write-Host " $k`: MISMATCH (stored len=$($stored.Length))" -ForegroundColor Red $allOK = $false } } Write-Host "" if ($allOK) { Write-Host "✓ All 7 env vars set successfully." -ForegroundColor Green Write-Host "" Write-Host "Запуск окна:" Write-Host " claude" Write-Host " # в чате:" Write-Host " /work-as-backend # любая из 5: analyst/backend/frontend/reviewer/qa" Write-Host " # pre-flight выполнится сам через env vars" Write-Host " /loop dynamic # или другой cadence" } else { Write-Host "✗ Some env vars failed to set." -ForegroundColor Red exit 1 }