diff --git a/claude_setup.sh b/claude_setup.sh index fd4e345..25f13ad 100755 --- a/claude_setup.sh +++ b/claude_setup.sh @@ -1041,19 +1041,92 @@ chmod +x "$BIN_DIR/claude_deepseek" # === claude_kimi === cat > "$BIN_DIR/claude_kimi" << 'KIMIEOF' #!/usr/bin/env bash -# ============================================================ -# claude_kimi — запуск нативного Kimi Code через Artemox API -# ============================================================ +source ~/.local/bin/claude_api_helpers.sh -kimi_bin="$HOME/.kimi-code/bin/kimi" +key_file="$HOME/.config/claude-launcher/kimi_key" +api_key="" +reauth=0 -if [ ! -f "$kimi_bin" ]; then - echo "Ошибка: Kimi Code не найден ($kimi_bin)." - echo "Установите: npm install -g @moonshot-ai/kimi-code" - exit 1 +[ -f "$key_file" ] && api_key=$(cat "$key_file") + +if [ -n "$api_key" ]; then + echo -n "Проверка сохранённого Kimi ключа... " + _claude_test_openai_api "https://api.artemox.com/v1/chat/completions" "$api_key" "kimi-k2.6" + _handle_openai_api_response "Kimi" "$_CLAUDE_TEST_CODE" "$_CLAUDE_TEST_BODY" "Пополните баланс: https://artemox.com/dashboard" + ret=$? + if [ $ret -eq 401 ]; then + rm -f "$key_file" + api_key="" + reauth=1 + elif [ $ret -eq 429 ]; then + echo -n "Продолжить всё равно? (запросы могут не проходить) [y/N] " + read -r _ans; case "${_ans:-N}" in [Yy]*) ;; *) exit 1 ;; esac + elif [ $ret -ne 0 ]; then + exit 1 + fi fi -exec "$kimi_bin" "$@" +if [ -z "$api_key" ] && [ "$reauth" -eq 1 ]; then + echo -n "Хотите ввести новый Kimi ключ? [Y/n] " + read -r _ans; case "${_ans:-Y}" in [Yy]*) ;; *) exit 1 ;; esac +fi + +if [ -z "$api_key" ]; then + echo "Получить ключ: https://artemox.com/dashboard" + read -r -p "Введите ваш Artemox API ключ: " api_key + [ -z "$api_key" ] && { echo "Выход."; exit 1; } + + echo -n "Проверяю ключ и баланс... " + _claude_test_openai_api "https://api.artemox.com/v1/chat/completions" "$api_key" "kimi-k2.6" + _handle_openai_api_response "Kimi" "$_CLAUDE_TEST_CODE" "$_CLAUDE_TEST_BODY" "Пополните баланс: https://artemox.com/dashboard" + ret=$? + if [ $ret -eq 0 ] || [ $ret -eq 429 ]; then + mkdir -p "$(dirname "$key_file")" + echo "$api_key" > "$key_file" + chmod 600 "$key_file" + echo "Ключ сохранён." + if [ $ret -eq 429 ]; then + echo -n "Продолжить всё равно? (запросы могут не проходить) [y/N] " + read -r _ans; case "${_ans:-N}" in [Yy]*) ;; *) exit 1 ;; esac + fi + else + echo "Ключ НЕ сохранён." + exit 1 + fi +fi + +# Запускаем прокси +proxy_bin="$HOME/.local/bin/claude-openai-anthropic-proxy.py" +proxy_port=18767 + +proxy_pid="" +cleanup() { [ -n "$proxy_pid" ] && kill "$proxy_pid" 2>/dev/null; } +trap cleanup EXIT INT TERM + +OPENAI_API_KEY="$api_key" \ +OPENAI_MODEL=kimi-k2.6 \ +python3 "$proxy_bin" --port "$proxy_port" &>/tmp/claude-openai-anthropic-proxy.log & +proxy_pid=$! + +echo -n "Запуск Kimi прокси... " +_i=0; while [ $_i -lt 10 ]; do sleep 1; curl -s --max-time 1 "http://localhost:$proxy_port/" &>/dev/null; [ "$?" -ne 7 ] && break; _i=$((_i + 1)); done +if [ $_i -ge 10 ]; then + echo -e "\033[0;31m[ОШИБКА]\033[0m Kimi прокси не запустился за 10 сек." + echo "Лог прокси:" + cat /tmp/claude-openai-anthropic-proxy.log 2>/dev/null + exit 1 +fi +echo -e "\033[0;32mOK\033[0m" + +ANTHROPIC_BASE_URL="http://localhost:$proxy_port" \ +ANTHROPIC_AUTH_TOKEN=dummy \ +ANTHROPIC_MODEL=kimi-k2.6 \ +ANTHROPIC_DEFAULT_OPUS_MODEL=kimi-k2.6 \ +ANTHROPIC_DEFAULT_SONNET_MODEL=kimi-k2.6 \ +ANTHROPIC_DEFAULT_HAIKU_MODEL=kimi-k2.6 \ +CLAUDE_CODE_SUBAGENT_MODEL=kimi-k2.6 \ +CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 \ +claude "$@" KIMIEOF chmod +x "$BIN_DIR/claude_kimi" @@ -1144,7 +1217,7 @@ echo "" echo "Доступные команды (теперь это независимые скрипты в ~/.local/bin):" echo -e " ${CYAN}claude_gpt${NC} — GPT-5.5 (ChatGPT Plus/Pro, браузерная авторизация)" echo -e " ${CYAN}claude_deepseek${NC} — DeepSeek (API ключ сохраняется)" -echo -e " ${CYAN}claude_kimi${NC} — Kimi K2.6 (нативный Kimi Code + Artemox API)" +echo -e " ${CYAN}claude_kimi${NC} — Kimi K2.6 (Artemox API, ключ сохраняется)" echo -e " ${CYAN}claude_gemini${NC} — Gemini (Google OAuth через браузер)" echo "" echo -e "${YELLOW}⚠️ Для Gemini используйте отдельный Google-аккаунт!${NC}"