Refactor: rename setup script to ai-setup.sh and update all references

This commit is contained in:
2026-05-31 19:09:50 +07:00
parent 9d7d51aac1
commit f38915eab2
7 changed files with 48 additions and 46 deletions

View File

@@ -0,0 +1 @@
/home/vitaly/.gemini/config/projects/ddb5132f-9552-4463-8aa2-f1eb9e72335f.json

View File

@@ -4,7 +4,7 @@
1. **Никаких самостоятельных коммитов (No unauthorized commits):** ЗАПРЕЩЕНО выполнять команду `git commit`, если пользователь прямо и недвусмысленно не попросил об этом. Финальный коммит делает пользователь или вы — строго по его команде.
2. **Полная перегенерация standalone-скриптов при запуске сетап-скрипта (Full regeneration of standalone scripts on setup run):** При каждом запуске `claude_setup.sh` все генерируемые скрипты в `~/.local/bin/` (`claude_gpt`, `claude_deepseek`, `claude_kimi`, `claude_gemini`, `claude_api_helpers.sh`) должны быть **полностью перезаписаны** актуальными версиями. Запрещено выполнять слияние (merge) старого и нового содержимого или дополнение (append). Скрипт обязан привести все генерируемые файлы к эталонному виду, однозначно определяемому текущей конфигурацией.
2. **Полная перегенерация standalone-скриптов при запуске сетап-скрипта (Full regeneration of standalone scripts on setup run):** При каждом запуске `ai-setup.sh` все генерируемые скрипты в `~/.local/bin/` (`ai-gpt`, `ai-deepseek`, `ai-kimi`, `ai-gemini`, `ai-api-helpers.sh`, `ai-claude`) должны быть **полностью перезаписаны** актуальными версиями. Запрещено выполнять слияние (merge) старого и нового содержимого или дополнение (append). Скрипт обязан привести все генерируемые файлы к эталонному виду, однозначно определяемому текущей конфигурацией.
3. **Изменения должны быть видны через `git diff` (Changes must be visible via plain git diff):** Оставляйте изменённые файлы в рабочей директории (unstaged), чтобы пользователь мог увидеть их, просто написав `git diff` в консоли. Не добавляйте их в индекс (`git add`) без прямой команды, так как это скрывает изменения от стандартной команды `git diff`.

View File

@@ -29,4 +29,4 @@ WORKDIR /home/tester
COPY --chown=tester:tester . /home/tester/project/
# Run setup script
CMD ["bash", "/home/tester/project/claude_setup.sh"]
CMD ["bash", "/home/tester/project/ai-setup.sh"]

View File

@@ -1,6 +1,6 @@
# Claude Code Launcher
Скрипт `claude_setup.sh` предназначен для автоматизации установки и настройки `Claude Code` вместе с прокси-серверами для доступа к различным LLM (Anthropic, ChatGPT, DeepSeek, Kimi, Gemini).
Скрипт `ai-setup.sh` предназначен для автоматизации установки и настройки `Claude Code` вместе с прокси-серверами для доступа к различным LLM (Anthropic, ChatGPT, DeepSeek, Kimi, Gemini).
## Что делает скрипт
@@ -17,18 +17,19 @@
## Использование
После выполнения скрипта необходимо применить изменения:
После выполнения скрипта откройте новый терминал или выполните:
```bash
source ~/.bashrc
exec bash
```
### Доступные команды запуска
* `claude_gpt`: Запуск нативного OpenAI Codex (автоустановка при первом запуске).
* `claude_deepseek`: Доступ к DeepSeek (требуется API ключ).
* `claude_kimi`: Запуск нативного Kimi K2.6 (автоустановка при первом запуске).
* `claude_gemini`: Доступ к Gemini (требует авторизации через веб-интерфейс `antigravity-claude-proxy`).
* `ai-claude`: Запуск оригинального Claude Code (Anthropic).
* `ai-gpt`: Запуск нативного OpenAI Codex (автоустановка при первом запуске).
* `ai-deepseek`: Доступ к DeepSeek (требуется API ключ).
* `ai-kimi`: Запуск нативного Kimi K2.6 (автоустановка при первом запуске).
* `ai-gemini`: Запуск нативного Antigravity CLI / agy (автоустановка при первом запуске).
## Важные замечания

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash
# ============================================================
# Claude Code Setup — GPT-5.5 / DeepSeek / Kimi / Gemini
# Запуск: bash claude_setup.sh
# Запуск: bash ai-setup.sh
# ============================================================
CONFIG_DIR="$HOME/.config/claude-launcher"
@@ -18,7 +18,7 @@ err() { echo -e "${RED}[ERR]${NC} $*"; exit 1; }
# Запрет запуска от root
if [ "$EUID" -eq 0 ]; then
echo -e "${RED}Не запускайте этот скрипт через sudo!${NC}"
echo "Запустите просто: bash claude_setup.sh"
echo "Запустите просто: bash ai-setup.sh"
exit 1
fi
@@ -556,7 +556,7 @@ CLAUDEEOF
chmod +x "$BIN_DIR/ai-claude"
info "Удаляю старые версии скриптов (claude_*)..."
rm -f "$BIN_DIR/claude_gpt" "$BIN_DIR/claude_deepseek" "$BIN_DIR/claude_kimi" "$BIN_DIR/claude_gemini" "$BIN_DIR/claude_api_helpers.sh"
rm -f "$BIN_DIR/ai-gpt" "$BIN_DIR/claude_deepseek" "$BIN_DIR/ai-kimi" "$BIN_DIR/claude_gemini" "$BIN_DIR/claude_api_helpers.sh"
success "Скрипты сгенерированы."

View File

@@ -7,21 +7,21 @@ set -euo pipefail
TMPDIR=$(mktemp -d)
trap 'rm -rf "$TMPDIR"' EXIT
# Генерируем скрипты из claude_setup.sh в изолированную директорию
# Генерируем скрипты из ai-setup.sh в изолированную директорию
BIN_DIR="$TMPDIR/bin"
mkdir -p "$BIN_DIR"
# Извлекаем claude_gpt
awk '/^cat > "\$BIN_DIR\/claude_gpt"/,/^GPTEOF/' claude_setup.sh | \
# Извлекаем ai-gpt
awk '/^cat > "\$BIN_DIR\/ai-gpt"/,/^GPTEOF/' ai-setup.sh | \
sed "s|\\\$BIN_DIR|$BIN_DIR|g" | bash
chmod +x "$BIN_DIR/claude_gpt"
chmod +x "$BIN_DIR/ai-gpt"
# Извлекаем claude_kimi
awk '/^cat > "\$BIN_DIR\/claude_kimi"/,/^KIMIEOF/' claude_setup.sh | \
# Извлекаем ai-kimi
awk '/^cat > "\$BIN_DIR\/ai-kimi"/,/^KIMIEOF/' ai-setup.sh | \
sed "s|\\\$BIN_DIR|$BIN_DIR|g" | bash
chmod +x "$BIN_DIR/claude_kimi"
chmod +x "$BIN_DIR/ai-kimi"
echo "=== Test 1: claude_gpt calls codex install URL when missing ==="
echo "=== Test 1: ai-gpt calls codex install URL when missing ==="
MOCK_LOG="$TMPDIR/mock_curl.log"
# Создаём mock curl, который логирует вызовы
@@ -38,20 +38,20 @@ fi
CURLEOF
chmod +x "$TMPDIR/curl"
# Запускаем claude_gpt с mock curl (чистый PATH, без системного codex)
HOME="$TMPDIR" PATH="$TMPDIR:/usr/bin:/bin" "$BIN_DIR/claude_gpt" --version 2>&1 || true
# Запускаем ai-gpt с mock curl (чистый PATH, без системного codex)
HOME="$TMPDIR" PATH="$TMPDIR:/usr/bin:/bin" "$BIN_DIR/ai-gpt" --version 2>&1 || true
if grep -q "chatgpt.com/codex/install.sh" "$MOCK_LOG"; then
echo "[PASS] claude_gpt вызвал установку Codex"
echo "[PASS] ai-gpt вызвал установку Codex"
else
echo "[FAIL] claude_gpt НЕ вызвал установку Codex"
echo "[FAIL] ai-gpt НЕ вызвал установку Codex"
echo "curl log:"
cat "$MOCK_LOG" 2>/dev/null || echo "(пусто)"
exit 1
fi
echo ""
echo "=== Test 2: claude_kimi calls kimi install URL when missing ==="
echo "=== Test 2: ai-kimi calls kimi install URL when missing ==="
MOCK_LOG="$TMPDIR/mock_curl2.log"
cat > "$TMPDIR/curl" << CURLEOF
@@ -66,12 +66,12 @@ fi
CURLEOF
chmod +x "$TMPDIR/curl"
HOME="$TMPDIR" PATH="$TMPDIR:/usr/bin:/bin" "$BIN_DIR/claude_kimi" --version 2>&1 || true
HOME="$TMPDIR" PATH="$TMPDIR:/usr/bin:/bin" "$BIN_DIR/ai-kimi" --version 2>&1 || true
if grep -q "code.kimi.com/kimi-code/install.sh" "$MOCK_LOG"; then
echo "[PASS] claude_kimi вызвал установку Kimi"
echo "[PASS] ai-kimi вызвал установку Kimi"
else
echo "[FAIL] claude_kimi НЕ вызвал установку Kimi"
echo "[FAIL] ai-kimi НЕ вызвал установку Kimi"
echo "curl log:"
cat "$MOCK_LOG" 2>/dev/null || echo "(пусто)"
exit 1

View File

@@ -1,53 +1,53 @@
#!/usr/bin/env bash
# tests/test_fixes.sh — unit tests for code-review fixes in claude_setup.sh
# tests/test_fixes.sh — unit tests for code-review fixes in ai-setup.sh
# Run: bash tests/test_fixes.sh
set -euo pipefail
SCRIPT="$(cd "$(dirname "$0")/.." && pwd)/claude_setup.sh"
SCRIPT="$(cd "$(dirname "$0")/.." && pwd)/ai-setup.sh"
PASS=0; FAIL=0
ok() { echo "[PASS] $1"; PASS=$((PASS+1)); }
fail() { echo "[FAIL] $1"; FAIL=$((FAIL+1)); }
# Extract sections
GPT_SECTION=$(awk '/^cat > "\$BIN_DIR\/claude_gpt"/,/^GPTEOF/' "$SCRIPT")
KIMI_SECTION=$(awk '/^cat > "\$BIN_DIR\/claude_kimi"/,/^KIMIEOF/' "$SCRIPT")
GPT_SECTION=$(awk '/^cat > "\$BIN_DIR\/ai-gpt"/,/^GPTEOF/' "$SCRIPT")
KIMI_SECTION=$(awk '/^cat > "\$BIN_DIR\/ai-kimi"/,/^KIMIEOF/' "$SCRIPT")
GEMINI_SECTION=$(awk '/^cat > "\$BIN_DIR\/claude_gemini"/,/^GEMINIEOF/' "$SCRIPT")
# ── claude_gpt: auto-install codex ────────────────────────────────────────────
# ── ai-gpt: auto-install codex ────────────────────────────────────────────
test_gpt_autoinstall() {
if echo "$GPT_SECTION" | grep -q 'curl -fsSL https://chatgpt.com/codex/install.sh'; then
ok "claude_gpt: auto-installs codex via official install script"
ok "ai-gpt: auto-installs codex via official install script"
else
fail "claude_gpt: missing codex auto-install"
fail "ai-gpt: missing codex auto-install"
fi
}
# ── claude_gpt: no proxy logic (simplified launcher) ──────────────────────────
# ── ai-gpt: no proxy logic (simplified launcher) ──────────────────────────
test_gpt_no_proxy() {
if echo "$GPT_SECTION" | grep -q 'ANTHROPIC_BASE_URL'; then
fail "claude_gpt: still contains proxy logic (ANTHROPIC_BASE_URL)"
fail "ai-gpt: still contains proxy logic (ANTHROPIC_BASE_URL)"
else
ok "claude_gpt: proxy logic removed (no ANTHROPIC_BASE_URL)"
ok "ai-gpt: proxy logic removed (no ANTHROPIC_BASE_URL)"
fi
}
# ── claude_kimi: auto-install kimi ────────────────────────────────────────────
# ── ai-kimi: auto-install kimi ────────────────────────────────────────────
test_kimi_autoinstall() {
if echo "$KIMI_SECTION" | grep -q 'curl -fsSL https://code.kimi.com/kimi-code/install.sh'; then
ok "claude_kimi: auto-installs kimi via official install script"
ok "ai-kimi: auto-installs kimi via official install script"
else
fail "claude_kimi: missing kimi auto-install"
fail "ai-kimi: missing kimi auto-install"
fi
}
# ── claude_kimi: no proxy logic (simplified launcher) ─────────────────────────
# ── ai-kimi: no proxy logic (simplified launcher) ─────────────────────────
test_kimi_no_proxy() {
if echo "$KIMI_SECTION" | grep -q 'ANTHROPIC_BASE_URL'; then
fail "claude_kimi: still contains proxy logic (ANTHROPIC_BASE_URL)"
fail "ai-kimi: still contains proxy logic (ANTHROPIC_BASE_URL)"
else
ok "claude_kimi: proxy logic removed (no ANTHROPIC_BASE_URL)"
ok "ai-kimi: proxy logic removed (no ANTHROPIC_BASE_URL)"
fi
}
@@ -74,9 +74,9 @@ test_fix7_trap_tmp() {
# ── bash syntax of the whole script ─────────────────────────────────────────
test_script_syntax() {
if bash -n "$SCRIPT" 2>&1; then
ok "syntax: claude_setup.sh passes 'bash -n'"
ok "syntax: ai-setup.sh passes 'bash -n'"
else
fail "syntax: claude_setup.sh has syntax errors"
fail "syntax: ai-setup.sh has syntax errors"
fi
}