feat: автодобавление Claude-аккаунта через /add-account

- новый хук add-account-hook.sh: сохраняет текущий аккаунт по реальному
  email (claude auth status), запускает OAuth-логин в фоне и после успеха
  сам сохраняет новый аккаунт в ~/.claude/accounts + делает его current
- switch-account-hook.sh: активный аккаунт определяется через
  claude auth status, а не через хрупкий файл current - защита от порчи
  сохранённых credentials при рассинхроне токена
- скилл add-account: краткая инструкция после срабатывания хука
- ai-setup.sh: деплой add-account-hook + регистрация в UserPromptSubmit

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-12 08:19:46 +03:00
parent f8465580e0
commit fe439fd4a6
4 changed files with 92 additions and 1 deletions

View File

@@ -752,6 +752,41 @@ else
warn "Файл $SWITCH_HOOK_SRC не найден, пропускаю"
fi
# ── 6.7.2. Хук add-account ──────────────────────────────────────
info "Деплою хук add-account..."
ADD_HOOK_SRC="$SCRIPT_DIR/home-configs/claude/hooks/add-account-hook.sh"
ADD_HOOK_DST="$HOME/.claude/hooks/add-account-hook.sh"
mkdir -p "$HOME/.claude/hooks"
if [ -f "$ADD_HOOK_SRC" ]; then
cp "$ADD_HOOK_SRC" "$ADD_HOOK_DST"
chmod +x "$ADD_HOOK_DST"
# Прописываем хук в settings.json (идемпотентно)
python3 - "$HOME/.claude/settings.json" "$ADD_HOOK_DST" <<'PYEOF'
import sys, json, os
settings_path, hook_path = sys.argv[1], sys.argv[2]
data = {}
if os.path.exists(settings_path):
with open(settings_path) as f:
try: data = json.load(f)
except json.JSONDecodeError: pass
data.setdefault("hooks", {}).setdefault("UserPromptSubmit", [{"hooks": []}])
hook_cmd = f'bash "{hook_path}"'
ups = data["hooks"]["UserPromptSubmit"]
already = any(
any(h.get("command", "") == hook_cmd for h in entry.get("hooks", []))
for entry in ups
)
if not already:
ups[0]["hooks"].append({"type": "command", "command": hook_cmd})
with open(settings_path, "w") as f:
json.dump(data, f, indent=2, ensure_ascii=False)
f.write("\n")
PYEOF
success "Хук add-account установлен"
else
warn "Файл $ADD_HOOK_SRC не найден, пропускаю"
fi
# ── 6.8. Регистрация официального маркетплейса плагинов Claude ──
info "Настраиваю маркетплейс плагинов Claude Code..."
if ! command -v claude &>/dev/null; then