From 15c4727fb78b72d66093950bd67e70d83304f381 Mon Sep 17 00:00:00 2001 From: vitaly Date: Sun, 31 May 2026 01:10:23 +0700 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D0=B4=D0=B2=D0=BE=D0=B9=D0=BD=D0=BE=D0=B9=20?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=D0=B8=D0=BD=20Anthropic:=20=D1=83=D0=B1?= =?UTF-8?q?=D1=80=D0=B0=D1=82=D1=8C=20claude=20auth=20login,=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0=D1=82=D1=8C=20claude=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=BF=D1=80=D1=8F=D0=BC=D1=83=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit В Claude Code v2.x команда "claude auth login" запускает полный интерактивный TUI (включая "Welcome to Claude Code" и "Select login method"), а затем функция дополнительно вызывала claude "$@" — вторая сессия. Пользователь проходил выбор типа аккаунта дважды. Исправление: ветка [L] теперь запускает claude "$@" напрямую с нужными моделями и сразу делает return "$?", не допуская повторного вызова claude снизу функции. Claude сам обрабатывает весь auth flow (браузер → OAuth → выбор аккаунта) за одно взаимодействие. Добавлен тест test_fix8_no_double_login (3 проверки), итого 24/24. Co-Authored-By: Claude Sonnet 4.6 --- claude_setup.sh | 18 +++++++++++------- tests/test_fixes.sh | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/claude_setup.sh b/claude_setup.sh index cca8c23..1955dbc 100755 --- a/claude_setup.sh +++ b/claude_setup.sh @@ -314,13 +314,17 @@ except: pass case "${_ans:-L}" in [Ll]) echo "" - echo "Открываю браузер для входа в Anthropic аккаунт..." - claude auth login || { - echo "" - echo -e "\033[0;31mНе удалось выполнить вход.\033[0m" - echo "Попробуйте вручную: claude auth login" - return 1 - } + echo "Запускаю Claude Code — войдите в аккаунт Anthropic в интерфейсе..." + # claude auth login + claude "$@" вызывали двойной auth flow (v2.x запускает + # полный TUI внутри auth login). Запускаем claude напрямую: он сам откроет + # браузер и попросит выбрать тип аккаунта в одном взаимодействии. + ANTHROPIC_MODEL=claude-sonnet-4-6 \ + ANTHROPIC_DEFAULT_OPUS_MODEL=claude-opus-4-8 \ + ANTHROPIC_DEFAULT_SONNET_MODEL=claude-sonnet-4-6 \ + ANTHROPIC_DEFAULT_HAIKU_MODEL=claude-haiku-4-5-20251001 \ + CLAUDE_CODE_SUBAGENT_MODEL=claude-haiku-4-5-20251001 \ + claude "$@" + return "$?" ;; [Kk]) echo "" diff --git a/tests/test_fixes.sh b/tests/test_fixes.sh index 138a4b3..100db9d 100755 --- a/tests/test_fixes.sh +++ b/tests/test_fixes.sh @@ -272,6 +272,38 @@ test_offer_reauth_enter_defaults_yes() { fi } +# ── Fix8: no double login — [L] branch calls claude directly, not auth login ─ +test_fix8_no_double_login() { + # [L] branch must NOT call "claude auth login"; must call claude directly and return. + + # Find the line number of [Ll]) + local ll_line + ll_line=$(grep -n '^\s*\[Ll\])' "$SCRIPT" | head -1 | cut -d: -f1) + + # Extract the next 20 lines starting at [Ll]) — enough to cover the whole arm + local ll_branch + ll_branch=$(awk "NR>=$ll_line && NR<=$((ll_line+20))" "$SCRIPT") + + # Check for actual invocation (not just a comment mentioning the command) + if echo "$ll_branch" | grep -v '^\s*#' | grep -q 'claude auth login'; then + fail "Fix8: [L] branch still calls 'claude auth login' — double login present" + else + ok "Fix8: [L] branch does NOT call 'claude auth login' (only mentions it in a comment)" + fi + + if echo "$ll_branch" | grep -qF 'return "$?"'; then + ok "Fix8: [L] branch returns after launching claude (no fallthrough to outer call)" + else + fail "Fix8: [L] branch missing 'return \"\$?\"' — outer claude call still reached" + fi + + if echo "$ll_branch" | grep -q 'ANTHROPIC_MODEL='; then + ok "Fix8: [L] branch sets model env vars before launching claude" + else + fail "Fix8: [L] branch missing model env vars" + fi +} + # ── bash syntax of the whole script ───────────────────────────────────────── test_script_syntax() { if bash -n "$SCRIPT" 2>&1; then @@ -283,6 +315,7 @@ test_script_syntax() { # ── run all tests ───────────────────────────────────────────────────────────── test_script_syntax +test_fix8_no_double_login test_fix1_export_api_key test_fix2_trap_return test_fix3_readiness_loop