Refactor: rename setup script to ai-setup.sh and update all references
This commit is contained in:
1
.antigravitycli/ddb5132f-9552-4463-8aa2-f1eb9e72335f.json
Symbolic link
1
.antigravitycli/ddb5132f-9552-4463-8aa2-f1eb9e72335f.json
Symbolic link
@@ -0,0 +1 @@
|
||||
/home/vitaly/.gemini/config/projects/ddb5132f-9552-4463-8aa2-f1eb9e72335f.json
|
||||
@@ -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`.
|
||||
|
||||
|
||||
@@ -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"]
|
||||
|
||||
15
README.md
15
README.md
@@ -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 (автоустановка при первом запуске).
|
||||
|
||||
## Важные замечания
|
||||
|
||||
|
||||
@@ -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 "Скрипты сгенерированы."
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user