feat(ai-setup): /logout для ai-glm, ai-deepseek, ai-kimi
Новый UserPromptSubmit хук logout-account-hook.sh перехватывает /logout
(провайдер по AI_LAUNCHER) и /logout-glm|/logout-deepseek|/logout-kimi
(явно), удаляет сохранённый ключ провайдера. Для ai-claude /logout
отступает — работает нативный oauth-logout.
- хук: удаляет glm_key/deepseek_key или текущий kimi_keys/<current>.key
(+.meta) с пересчётом current; exit 2 глушит нативную /logout для
api-key провайдеров
- 3 скилла logout-{glm,deepseek,kimi} для автокомплита
- ai-setup.sh: секция деплоя 6.7.3 + хук в копирование/регистрацию
изолированных cfg
Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
60
home-configs/claude/hooks/logout-account-hook.sh
Executable file
60
home-configs/claude/hooks/logout-account-hook.sh
Executable file
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env bash
|
||||
# Copyright (c) 2026 Виталий Никитенко. MIT License.
|
||||
# UserPromptSubmit hook: перехватывает /logout, /logout-glm, /logout-deepseek, /logout-kimi.
|
||||
# Удаляет сохранённый API-ключ провайдера, чтобы при следующем запуске лаунчер
|
||||
# запросил новый.
|
||||
# /logout-glm | /logout-deepseek | /logout-kimi — явно указанный провайдер.
|
||||
# /logout (без суффикса) — провайдер по AI_LAUNCHER (glm/deepseek/kimi).
|
||||
# Для ai-claude и прочих лаунчеров /logout отступает (exit 0) — пусть работает
|
||||
# нативный oauth-logout. exit 2 после удаления: LLM не нужна, и нативная
|
||||
# /logout не пытается сделать бессмысленный oauth-logout для api-key провайдеров.
|
||||
|
||||
input=$(cat)
|
||||
prompt=$(echo "$input" | jq -r '.user_prompt // .prompt // empty' 2>/dev/null)
|
||||
normalized=$(echo "$prompt" | sed 's|^[[:space:]]*/||; s|[[:space:]]*$||')
|
||||
cmd=$(echo "$normalized" | awk '{print $1}')
|
||||
|
||||
target=""
|
||||
case "$cmd" in
|
||||
logout-glm) target=glm ;;
|
||||
logout-deepseek) target=deepseek ;;
|
||||
logout-kimi) target=kimi ;;
|
||||
logout)
|
||||
case "${AI_LAUNCHER:-claude}" in
|
||||
glm|deepseek|kimi) target="$AI_LAUNCHER" ;;
|
||||
*) exit 0 ;;
|
||||
esac
|
||||
;;
|
||||
*) exit 0 ;;
|
||||
esac
|
||||
|
||||
CFG="$HOME/.config/ai-setup"
|
||||
|
||||
case "$target" in
|
||||
glm)
|
||||
rm -f "$CFG/glm_key"
|
||||
echo "✓ GLM ключ удалён. Перезапусти ai-glm, чтобы ввести новый." >&2
|
||||
;;
|
||||
deepseek)
|
||||
rm -f "$CFG/deepseek_key"
|
||||
echo "✓ DeepSeek ключ удалён. Перезапусти ai-deepseek, чтобы ввести новый." >&2
|
||||
;;
|
||||
kimi)
|
||||
KEYS_DIR="$CFG/kimi_keys"
|
||||
current=$(cat "$KEYS_DIR/current" 2>/dev/null || true)
|
||||
if [ -n "$current" ]; then
|
||||
rm -f "$KEYS_DIR/${current}.key" "$KEYS_DIR/${current}.meta"
|
||||
fi
|
||||
# Пересчёт current: переключаемся на первый оставшийся ключ либо сбрасываем.
|
||||
mapfile -t keys < <(ls "$KEYS_DIR"/*.key 2>/dev/null | xargs -I{} basename {} .key | sort)
|
||||
if [ "${#keys[@]}" -gt 0 ]; then
|
||||
echo "${keys[0]}" > "$KEYS_DIR/current"
|
||||
echo "✓ Kimi ключ (${current:-нет}) удалён. Активен: ${keys[0]}. Перезапусти ai-kimi." >&2
|
||||
else
|
||||
rm -f "$KEYS_DIR/current"
|
||||
echo "✓ Kimi ключ (${current:-нет}) удалён. Других ключей нет. Перезапусти ai-kimi." >&2
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 2
|
||||
Reference in New Issue
Block a user