feat: автоопределение BIN_DIR — ~/bin если есть в PATH, иначе ~/.local/bin
- BIN_DIR теперь определяется по наличию ~/bin в PATH (для Mint, где нет .bashrc) - source путей в генерируемых скриптах заменены на self-referential (через BASH_SOURCE) - agy_bin подменяется post-generation sed при нестандартном BIN_DIR - add_path_to_rc() формирует PATH динамически с учётом BIN_DIR - при миграции на ~/bin старые скрипты из ~/.local/bin удаляются Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -5,7 +5,12 @@
|
|||||||
# ============================================================
|
# ============================================================
|
||||||
|
|
||||||
CONFIG_DIR="$HOME/.config/ai-setup"
|
CONFIG_DIR="$HOME/.config/ai-setup"
|
||||||
BIN_DIR="$HOME/.local/bin"
|
# Автоопределение: ~/bin если есть в PATH, иначе ~/.local/bin
|
||||||
|
if [[ ":$PATH:" == *":$HOME/bin:"* ]]; then
|
||||||
|
BIN_DIR="$HOME/bin"
|
||||||
|
else
|
||||||
|
BIN_DIR="$HOME/.local/bin"
|
||||||
|
fi
|
||||||
NPM_GLOBAL="$HOME/.npm-global"
|
NPM_GLOBAL="$HOME/.npm-global"
|
||||||
PROXY_BIN="$BIN_DIR/claude-code-proxy"
|
PROXY_BIN="$BIN_DIR/claude-code-proxy"
|
||||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||||
@@ -744,13 +749,14 @@ clean_rc "$HOME/.zshrc"
|
|||||||
|
|
||||||
add_path_to_rc() {
|
add_path_to_rc() {
|
||||||
local rc_file="$1"
|
local rc_file="$1"
|
||||||
|
local bin_rel="${BIN_DIR#$HOME/}"
|
||||||
if [ -f "$rc_file" ]; then
|
if [ -f "$rc_file" ]; then
|
||||||
if ! grep -q 'NPM_GLOBAL' "$rc_file" 2>/dev/null; then
|
if ! grep -q 'NPM_GLOBAL' "$rc_file" 2>/dev/null; then
|
||||||
cat >> "$rc_file" << 'PATHEOF'
|
cat >> "$rc_file" << PATHEOF
|
||||||
|
|
||||||
# Claude Code Launcher PATH
|
# Claude Code Launcher PATH
|
||||||
export NPM_GLOBAL="$HOME/.npm-global"
|
export NPM_GLOBAL="\$HOME/.npm-global"
|
||||||
export PATH="$NPM_GLOBAL/bin:$HOME/.local/bin:$PATH"
|
export PATH="\$NPM_GLOBAL/bin:\$HOME/${bin_rel}:\$PATH"
|
||||||
PATHEOF
|
PATHEOF
|
||||||
success "PATH добавлен в $rc_file"
|
success "PATH добавлен в $rc_file"
|
||||||
fi
|
fi
|
||||||
@@ -1027,7 +1033,7 @@ chmod +x "$HELPERS_FILE"
|
|||||||
cat > "$BIN_DIR/ai-gpt" << 'GPTEOF'
|
cat > "$BIN_DIR/ai-gpt" << 'GPTEOF'
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# ai-gpt - запуск нативного OpenAI Codex
|
# ai-gpt - запуск нативного OpenAI Codex
|
||||||
source "$HOME/.local/bin/ai-api-helpers.sh" 2>/dev/null || true
|
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/ai-api-helpers.sh" 2>/dev/null || true
|
||||||
|
|
||||||
codex_bin="$HOME/.npm-global/bin/codex"
|
codex_bin="$HOME/.npm-global/bin/codex"
|
||||||
[ ! -f "$codex_bin" ] && codex_bin="$(command -v codex 2>/dev/null)"
|
[ ! -f "$codex_bin" ] && codex_bin="$(command -v codex 2>/dev/null)"
|
||||||
@@ -1060,7 +1066,7 @@ chmod +x "$BIN_DIR/ai-gpt"
|
|||||||
# === ai-deepseek ===
|
# === ai-deepseek ===
|
||||||
cat > "$BIN_DIR/ai-deepseek" << 'DEEPSEEKEOF'
|
cat > "$BIN_DIR/ai-deepseek" << 'DEEPSEEKEOF'
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
source "$HOME/.local/bin/ai-api-helpers.sh" 2>/dev/null || true
|
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/ai-api-helpers.sh" 2>/dev/null || true
|
||||||
|
|
||||||
key_file="$HOME/.config/ai-setup/deepseek_key"
|
key_file="$HOME/.config/ai-setup/deepseek_key"
|
||||||
api_key=""
|
api_key=""
|
||||||
@@ -1135,7 +1141,7 @@ chmod +x "$BIN_DIR/ai-deepseek"
|
|||||||
cat > "$BIN_DIR/ai-kimi" << 'KIMIEOF'
|
cat > "$BIN_DIR/ai-kimi" << 'KIMIEOF'
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# ai-kimi - запуск Claude Code через официальный Kimi Code API
|
# ai-kimi - запуск Claude Code через официальный Kimi Code API
|
||||||
source "$HOME/.local/bin/ai-api-helpers.sh" 2>/dev/null || true
|
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/ai-api-helpers.sh" 2>/dev/null || true
|
||||||
|
|
||||||
key_file="$HOME/.config/ai-setup/kimi_key"
|
key_file="$HOME/.config/ai-setup/kimi_key"
|
||||||
api_key=""
|
api_key=""
|
||||||
@@ -1207,7 +1213,7 @@ chmod +x "$BIN_DIR/ai-kimi"
|
|||||||
cat > "$BIN_DIR/ai-openrouter" << 'OPENROUTEREOF'
|
cat > "$BIN_DIR/ai-openrouter" << 'OPENROUTEREOF'
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# ai-openrouter - запуск Claude Code через OpenRouter (любые модели)
|
# ai-openrouter - запуск Claude Code через OpenRouter (любые модели)
|
||||||
source "$HOME/.local/bin/ai-api-helpers.sh" 2>/dev/null || true
|
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/ai-api-helpers.sh" 2>/dev/null || true
|
||||||
|
|
||||||
key_file="$HOME/.config/ai-setup/openrouter_key"
|
key_file="$HOME/.config/ai-setup/openrouter_key"
|
||||||
api_key=""
|
api_key=""
|
||||||
@@ -1297,19 +1303,21 @@ if [ -z "$agy_bin" ] || [ ! -f "$agy_bin" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
source "$HOME/.local/bin/ai-api-helpers.sh" 2>/dev/null || true
|
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/ai-api-helpers.sh" 2>/dev/null || true
|
||||||
|
|
||||||
# agy нативно подтягивает правила и проектные .md файлы,
|
# agy нативно подтягивает правила и проектные .md файлы,
|
||||||
# поэтому ручная инъекция SYS_PROMPT больше не требуется.
|
# поэтому ручная инъекция SYS_PROMPT больше не требуется.
|
||||||
exec "$agy_bin" --dangerously-skip-permissions "$@"
|
exec "$agy_bin" --dangerously-skip-permissions "$@"
|
||||||
GEMINIEOF
|
GEMINIEOF
|
||||||
chmod +x "$BIN_DIR/ai-gemini"
|
chmod +x "$BIN_DIR/ai-gemini"
|
||||||
|
# Подменяем путь к agy, если BIN_DIR отличается от ~/.local/bin
|
||||||
|
[ "$BIN_DIR" != "$HOME/.local/bin" ] && sed -i "s|\$HOME/\.local/bin|\$HOME/${BIN_DIR#$HOME/}|g" "$BIN_DIR/ai-gemini"
|
||||||
|
|
||||||
# === ai-claude ===
|
# === ai-claude ===
|
||||||
cat > "$BIN_DIR/ai-claude" << 'CLAUDEEOF'
|
cat > "$BIN_DIR/ai-claude" << 'CLAUDEEOF'
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# ai-claude - запуск оригинального Claude Code (Anthropic)
|
# ai-claude - запуск оригинального Claude Code (Anthropic)
|
||||||
source "$HOME/.local/bin/ai-api-helpers.sh" 2>/dev/null || true
|
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/ai-api-helpers.sh" 2>/dev/null || true
|
||||||
_PROMPT_FILE=$(mktemp /tmp/ai-sys-prompt.XXXXXX)
|
_PROMPT_FILE=$(mktemp /tmp/ai-sys-prompt.XXXXXX)
|
||||||
trap 'rm -f "$_PROMPT_FILE"' EXIT INT TERM
|
trap 'rm -f "$_PROMPT_FILE"' EXIT INT TERM
|
||||||
_build_ai_sys_prompt > "$_PROMPT_FILE"
|
_build_ai_sys_prompt > "$_PROMPT_FILE"
|
||||||
@@ -1332,6 +1340,14 @@ fi
|
|||||||
info "Удаляю старые версии скриптов (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/claude_gpt" "$BIN_DIR/claude_deepseek" "$BIN_DIR/claude_kimi" "$BIN_DIR/claude_gemini" "$BIN_DIR/claude_api_helpers.sh"
|
||||||
|
|
||||||
|
# Если переехали на ~/bin — удаляем старые скрипты из ~/.local/bin
|
||||||
|
if [ "$BIN_DIR" != "$HOME/.local/bin" ]; then
|
||||||
|
warn "BIN_DIR=$BIN_DIR — удаляю старые скрипты из ~/.local/bin/ ..."
|
||||||
|
rm -f "$HOME/.local/bin/ai-gpt" "$HOME/.local/bin/ai-deepseek" "$HOME/.local/bin/ai-kimi" \
|
||||||
|
"$HOME/.local/bin/ai-openrouter" "$HOME/.local/bin/ai-gemini" "$HOME/.local/bin/ai-claude" \
|
||||||
|
"$HOME/.local/bin/ai-api-helpers.sh" "$HOME/.local/bin/claude-gpt-effort-proxy.py"
|
||||||
|
fi
|
||||||
|
|
||||||
success "Скрипты сгенерированы."
|
success "Скрипты сгенерированы."
|
||||||
|
|
||||||
# ── 9. Итог ──────────────────────────────────────────────────
|
# ── 9. Итог ──────────────────────────────────────────────────
|
||||||
@@ -1340,7 +1356,7 @@ echo -e "${GREEN}═════════════════════
|
|||||||
echo -e "${GREEN} Установка завершена!${NC}"
|
echo -e "${GREEN} Установка завершена!${NC}"
|
||||||
echo -e "${GREEN}════════════════════════════════════════════════════${NC}"
|
echo -e "${GREEN}════════════════════════════════════════════════════${NC}"
|
||||||
echo ""
|
echo ""
|
||||||
echo "Доступные команды (теперь это независимые скрипты в ~/.local/bin):"
|
echo "Доступные команды (теперь это независимые скрипты в ~/${BIN_DIR#$HOME/}):"
|
||||||
echo ""
|
echo ""
|
||||||
echo " На базе Claude Code:"
|
echo " На базе Claude Code:"
|
||||||
echo -e " ${CYAN}ai-claude${NC} - Оригинальный Claude Code (Anthropic)"
|
echo -e " ${CYAN}ai-claude${NC} - Оригинальный Claude Code (Anthropic)"
|
||||||
|
|||||||
2
setup.sh
2
setup.sh
@@ -56,7 +56,7 @@ else
|
|||||||
echo -e " ${GRY}Тесты маршрутизации: .ru напрямую, остальное через Amnezia.${CLR}"
|
echo -e " ${GRY}Тесты маршрутизации: .ru напрямую, остальное через Amnezia.${CLR}"
|
||||||
echo ""
|
echo ""
|
||||||
echo -e " ${BLD}7) Обновить${CLR}"
|
echo -e " ${BLD}7) Обновить${CLR}"
|
||||||
echo -e " ${GRY}git pull + перегенерация всех скриптов в ~/.local/bin.${CLR}"
|
echo -e " ${GRY}git pull + перегенерация всех скриптов в ~/bin (или ~/.local/bin).${CLR}"
|
||||||
echo ""
|
echo ""
|
||||||
echo -n "Выбери [1-7] или Enter для выхода: "
|
echo -n "Выбери [1-7] или Enter для выхода: "
|
||||||
read -r choice
|
read -r choice
|
||||||
|
|||||||
Reference in New Issue
Block a user