fix: определение Claude-аккаунта по токену вместо auth status

Корень багов с потерей токенов: claude auth status читает
oauthAccount.emailAddress из ~/.claude.json, который рассинхронизирован
с реальным токеном в .credentials.json. Из-за этого хуки определяли
текущий аккаунт неверно и сохраняли активный токен под чужим именем,
затирая credentials другого аккаунта.

- account-email.sh (новый): определяет email по OAuth-токену —
  локальный матчинг с accounts/, затем API /api/oauth/profile
- switch-account-hook.sh: current выводится из токена, а не из
  auth status/хрупкого файла current — порча файлов исключена.
  Перезапуск не нужен: на Linux Claude Code перечитывает
  .credentials.json на лету
- add-account-hook.sh: email нового аккаунта тоже через хелпер
- skill add-account: убрано упоминание перезапуска
- ai-setup.sh: деплой account-email.sh (секция 6.7.05)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-12 09:06:44 +03:00
parent fe439fd4a6
commit f3d1b6d5c5
5 changed files with 74 additions and 29 deletions

View File

@@ -717,6 +717,17 @@ if isinstance(stop, list):
PYEOF
success "Старый хук effort-save удалён"
# ── 6.7.05. Хелпер account-email (определение email по токену) ──
# Вспомогательный скрипт для хуков switch-account/add-account.
# Не регистрируется в settings.json — вызывается из хуков напрямую.
EMAIL_HELPER_SRC="$SCRIPT_DIR/home-configs/claude/hooks/account-email.sh"
EMAIL_HELPER_DST="$HOME/.claude/hooks/account-email.sh"
mkdir -p "$HOME/.claude/hooks"
if [ -f "$EMAIL_HELPER_SRC" ]; then
cp "$EMAIL_HELPER_SRC" "$EMAIL_HELPER_DST"
chmod +x "$EMAIL_HELPER_DST"
fi
# ── 6.7.1. Хук switch-account ───────────────────────────────────
info "Деплою хук switch-account..."
SWITCH_HOOK_SRC="$SCRIPT_DIR/home-configs/claude/hooks/switch-account-hook.sh"