From 8bb81398af23c532eec060299fdc6f2751a44f5f Mon Sep 17 00:00:00 2001 From: vitaly Date: Sat, 30 May 2026 23:38:43 +0700 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D1=83?= =?UTF-8?q?=20Kimi=20K2.6=20(Moonshot=20AI)=20=D0=B8=20=D1=83=D0=BB=D1=83?= =?UTF-8?q?=D1=87=D1=88=D0=B8=D1=82=D1=8C=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BA=D1=83=20API=20=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Новая функция claude_kimi: Anthropic-совместимый API Moonshot AI - Улучшена проверка ключей DeepSeek и Kimi: реальный вызов API с 1 токеном вместо GET /v1/models (бесплатный endpoint не ловил заблокированные аккаунты) - Проверка различает: 200 (OK), 429 (заблокирован/нет средств), 401/403 (невалидный ключ), сетевые ошибки - При блокировке (429) выводится сообщение об ошибке и ссылка на пополнение баланса, ключ не сохраняется - Обновлён README.md Co-Authored-By: Claude Opus 4.8 --- README.md | 5 ++- claude_setup.sh | 109 ++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 104 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 75dfda7..6ee7396 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Claude Code Launcher -Скрипт `claude_setup.sh` предназначен для автоматизации установки и настройки `Claude Code` вместе с прокси-серверами для доступа к различным LLM (Anthropic, ChatGPT, DeepSeek, Gemini). +Скрипт `claude_setup.sh` предназначен для автоматизации установки и настройки `Claude Code` вместе с прокси-серверами для доступа к различным LLM (Anthropic, ChatGPT, DeepSeek, Kimi, Gemini). ## Что делает скрипт @@ -28,11 +28,12 @@ source ~/.bashrc * `claude_anthropic`: Оригинальный Claude (через API Anthropic). * `claude_gpt`: Доступ к GPT-5.5 (требует авторизации через `claude-code-proxy`). * `claude_deepseek`: Доступ к DeepSeek (требуется API ключ). +* `claude_kimi`: Доступ к Kimi K2.6 от Moonshot AI (требуется API ключ). * `claude_gemini`: Доступ к Gemini (требует авторизации через веб-интерфейс `antigravity-claude-proxy`). ## Важные замечания * **Gemini**: Для работы с Gemini крайне рекомендуется использовать отдельный Google-аккаунт, чтобы избежать блокировок основного аккаунта из-за использования прокси. * **Безопасность**: - * `deepseek_key` сохраняется в `~/.config/claude-launcher/deepseek_key` с правами доступа `600`. + * `deepseek_key` и `kimi_key` сохраняются в `~/.config/claude-launcher/` с правами доступа `600`. * Скрипт проверяет, чтобы не запускаться от `root`. diff --git a/claude_setup.sh b/claude_setup.sh index 3e9e095..5201e7e 100644 --- a/claude_setup.sh +++ b/claude_setup.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash # ============================================================ -# Claude Code Setup — Anthropic / GPT-5.5 / DeepSeek / Gemini +# Claude Code Setup — Anthropic / GPT-5.5 / DeepSeek / Kimi / Gemini # Запуск: bash claude_setup.sh # ============================================================ @@ -224,25 +224,43 @@ claude_deepseek() { return 1 fi - echo "Проверяю ключ..." - local http_code - http_code=$(curl -s -o /dev/null -w "%{http_code}" \ - https://api.deepseek.com/v1/models \ - -H "Authorization: Bearer $api_key" 2>/dev/null || echo "000") + echo "Проверяю ключ и баланс..." + local http_code http_body err_msg + http_body=$(curl -s -w "\n%{http_code}" \ + https://api.deepseek.com/anthropic/v1/messages \ + -H "Authorization: Bearer $api_key" \ + -H "Content-Type: application/json" \ + -H "anthropic-version: 2023-06-01" \ + -d '{"model":"deepseek-v4-flash","max_tokens":1,"messages":[{"role":"user","content":"hi"}]}' 2>/dev/null || echo "000") + http_code=$(echo "$http_body" | tail -1) + http_body=$(echo "$http_body" | sed '$d') if [ "$http_code" = "200" ]; then mkdir -p "$(dirname "$key_file")" echo "$api_key" > "$key_file" chmod 600 "$key_file" - echo "Ключ сохранён. В следующий раз вводить не нужно." + echo "Ключ действителен, баланс в порядке. Ключ сохранён." elif [ "$http_code" = "000" ]; then echo "Не удалось проверить ключ (нет сети?). Сохраняю без проверки..." mkdir -p "$(dirname "$key_file")" echo "$api_key" > "$key_file" chmod 600 "$key_file" - else + elif [ "$http_code" = "429" ]; then + err_msg=$(echo "$http_body" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('error',{}).get('message',''))" 2>/dev/null || echo "") + echo "" + echo -e "\033[0;31m[ОШИБКА]\033[0m Ключ действителен, но аккаунт заблокирован." + echo " Причина: $err_msg" + echo " Пополните баланс: https://platform.deepseek.com/top_up" + echo " Ключ НЕ сохранён — сначала пополните счёт." + return 1 + elif [ "$http_code" = "401" ] || [ "$http_code" = "403" ]; then echo "Ключ недействителен (HTTP $http_code). Ключ не сохранён." return 1 + else + err_msg=$(echo "$http_body" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('error',{}).get('message',''))" 2>/dev/null || echo "$http_body") + echo "Ошибка API (HTTP $http_code): $err_msg" + echo "Ключ не сохранён." + return 1 fi fi @@ -257,6 +275,79 @@ claude_deepseek() { claude "$@" } +# ── claude_kimi ───────────────────────────────────────────── +claude_kimi() { + local key_file="$HOME/.config/claude-launcher/kimi_key" + local api_key="" + + if [ -f "$key_file" ]; then + api_key=$(cat "$key_file") + fi + + if [ -z "$api_key" ]; then + echo "" + echo "Kimi (Moonshot AI) API ключ не найден." + echo "Получить ключ: https://platform.moonshot.ai/console/api-keys" + echo "" + read -r -p "Введите ваш Kimi API ключ (начинается с 'sk-'): " api_key + echo "" + + if [ -z "$api_key" ]; then + echo "Ключ не введён. Выход." + return 1 + fi + + echo "Проверяю ключ и баланс..." + local http_code http_body err_msg + http_body=$(curl -s -w "\n%{http_code}" \ + https://api.moonshot.ai/anthropic/v1/messages \ + -H "Authorization: Bearer $api_key" \ + -H "Content-Type: application/json" \ + -H "anthropic-version: 2023-06-01" \ + -d '{"model":"kimi-k2.6","max_tokens":1,"messages":[{"role":"user","content":"hi"}]}' 2>/dev/null || echo "000") + http_code=$(echo "$http_body" | tail -1) + http_body=$(echo "$http_body" | sed '$d') + + if [ "$http_code" = "200" ]; then + mkdir -p "$(dirname "$key_file")" + echo "$api_key" > "$key_file" + chmod 600 "$key_file" + echo "Ключ действителен, баланс в порядке. Ключ сохранён." + elif [ "$http_code" = "000" ]; then + echo "Не удалось проверить ключ (нет сети?). Сохраняю без проверки..." + mkdir -p "$(dirname "$key_file")" + echo "$api_key" > "$key_file" + chmod 600 "$key_file" + elif [ "$http_code" = "429" ]; then + err_msg=$(echo "$http_body" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('error',{}).get('message',''))" 2>/dev/null || echo "") + echo "" + echo -e "\033[0;31m[ОШИБКА]\033[0m Ключ действителен, но аккаунт заблокирован." + echo " Причина: $err_msg" + echo " Пополните баланс: https://platform.moonshot.ai/console/billing" + echo " Ключ НЕ сохранён — сначала пополните счёт." + return 1 + elif [ "$http_code" = "401" ] || [ "$http_code" = "403" ]; then + echo "Ключ недействителен (HTTP $http_code). Ключ не сохранён." + return 1 + else + err_msg=$(echo "$http_body" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('error',{}).get('message',''))" 2>/dev/null || echo "$http_body") + echo "Ошибка API (HTTP $http_code): $err_msg" + echo "Ключ не сохранён." + return 1 + fi + fi + + ANTHROPIC_BASE_URL=https://api.moonshot.ai/anthropic \ + ANTHROPIC_AUTH_TOKEN="$api_key" \ + 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 "$@" +} + # ── claude_gemini ───────────────────────────────────────────── claude_gemini() { local acc_cmd="" @@ -342,6 +433,7 @@ echo "Доступные команды:" echo -e " ${CYAN}claude_anthropic${NC} — оригинальный Claude (Anthropic API)" 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 (Moonshot AI, API ключ сохраняется)" echo -e " ${CYAN}claude_gemini${NC} — Gemini (Google OAuth через браузер)" echo "" echo "Все команды принимают стандартные флаги:" @@ -351,6 +443,7 @@ echo -e "${YELLOW}⚠️ Для Gemini используйте отдельны echo "" echo "Управление:" echo -e " DeepSeek ключ: ${CYAN}rm $DEEPSEEK_KEY_FILE${NC} (сбросить)" +echo -e " Kimi ключ: ${CYAN}rm $CONFIG_DIR/kimi_key${NC} (сбросить)" echo -e " GPT статус: ${CYAN}claude-code-proxy codex auth status${NC}" echo -e " GPT выйти: ${CYAN}claude-code-proxy codex auth logout${NC}" echo -e " Gemini WebUI: ${CYAN}http://localhost:8080${NC} (когда прокси запущен)"