diff --git a/QUICK_START.md b/QUICK_START.md index 8e066c8..6d96851 100644 --- a/QUICK_START.md +++ b/QUICK_START.md @@ -3,7 +3,7 @@ ## 1. Установить AI-инструменты ```bash -bash ai-setup.sh +bash setup.sh ``` Спросит про VLESS-прокси (можно пропустить — `n`), затем установит лаунчеры @@ -26,10 +26,10 @@ ip route show default # Пример: default via 192.168.1.1 dev wlp1s0 # Запустить скрипт (дефолты: GATEWAY=192.168.1.1, DEV=wlp1s0) -sudo bash home-configs/network/ru-bypass.sh +sudo bash scripts/ru-bypass.sh # Если параметры отличаются: -sudo GATEWAY=10.0.0.1 DEV=enp3s0 bash home-configs/network/ru-bypass.sh +sudo GATEWAY=10.0.0.1 DEV=enp3s0 bash scripts/ru-bypass.sh ``` После первого запуска systemd-сервисы установлены — при перезагрузке всё поднимается само. @@ -46,12 +46,12 @@ bash tests/test_network.sh ```bash # Выйти из Claude Code, затем: -sudo bash home-configs/network/ks-off.sh +sudo bash scripts/ks-off.sh # Отключить Amnezia в GUI # Вернуться к нормальному режиму: # Подключить Amnezia в GUI, затем: -sudo bash home-configs/network/ks-on.sh +sudo bash scripts/ks-on.sh ``` ## Подробнее diff --git a/README.md b/README.md index 3b5d4fc..1a1f7b8 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,12 @@ Набор shell-лаунчеров для локальной установки и запуска нескольких AI coding CLI из единой точки входа. -Главный скрипт - `ai-setup.sh`. Он настраивает пользовательские директории, устанавливает глобальные правила агентов из `GLOBAL_RULES.md`, разворачивает кастомные скиллы и полностью перегенерирует standalone-скрипты в `~/.local/bin`. +Точка входа — `setup.sh` (мастер-скрипт с меню). Он вызывает нужный скрипт из `scripts/`. +`scripts/ai-setup.sh` настраивает пользовательские директории, устанавливает глобальные правила агентов из `GLOBAL_RULES.md`, разворачивает кастомные скиллы и полностью перегенерирует standalone-скрипты в `~/.local/bin`. ## Что реально устанавливается и генерируется -`ai-setup.sh` работает с такими путями: +`scripts/ai-setup.sh` работает с такими путями: - `~/.local/bin` - standalone-лаунчеры и вспомогательные скрипты. - `~/.config/ai-setup` - сохранённые ключи и глобальные правила. @@ -25,7 +26,7 @@ - `~/.local/bin/ai-api-helpers.sh` - `~/.local/bin/claude-gpt-effort-proxy.py` -Все генерируемые standalone-скрипты полностью перезаписываются текущей эталонной версией из `ai-setup.sh`. Старое содержимое не сливается и не дописывается. +Все генерируемые standalone-скрипты полностью перезаписываются текущей эталонной версией из `scripts/ai-setup.sh`. Старое содержимое не сливается и не дописывается. ## Структура конфигов @@ -41,9 +42,7 @@ home-configs/ │ └── el-review-heavy/ │ └── SKILL.md ├── network/ -│ ├── ks-off.sh # временно отключить UFW kill switch -│ ├── ks-on.sh # восстановить UFW kill switch -│ └── ru-bypass.sh # .ru трафик напрямую (bypass Amnezia), всё остальное через VPN +│ └── README.md # документация по сетевой настройке ├── vless/ │ └── servers.conf # список VLESS-серверов для прокси ├── proxychains/ @@ -51,7 +50,7 @@ home-configs/ └── xray/ # (зарезервировано под будущие xray-конфиги) ``` -При запуске `ai-setup.sh`: +При запуске `scripts/ai-setup.sh`: - `GLOBAL_RULES.md` копируется в `~/.config/ai-setup/global_rules.md` и рассылается в нативные rule-файлы (`~/.claude/CLAUDE.md`, `~/.codex/AGENTS.md`, `~/.kimi-code/AGENTS.md`, `~/.gemini/GEMINI.md`). - Скиллы из `home-configs/claude/skills/` копируются и в `~/.claude/skills/`, и в `~/.gemini/config/plugins/local-setup/skills/`. Для Gemini также генерируется `plugin.json`, чтобы `agy` распознал плагин `local-setup`. @@ -61,7 +60,7 @@ home-configs/ ## VLESS / Xray (опционально) -При запуске `ai-setup.sh` первым делом спрашивает, нужен ли режим VLESS-прокси: +При запуске `scripts/ai-setup.sh` первым делом спрашивает, нужен ли режим VLESS-прокси: ``` Установить встроенный vless? [Y/n] @@ -89,7 +88,13 @@ home-configs/ Запускать от обычного пользователя, не через `sudo`: ```bash -bash ai-setup.sh +bash setup.sh +``` + +Мастер-скрипт предложит меню с выбором что запустить. Либо напрямую: + +```bash +bash scripts/ai-setup.sh ``` Скрипт прямо запрещает запуск от root. При этом, если Node.js не найден, он может попытаться установить Node.js через `apt-get` или `dnf` и тогда попросит `sudo` уже внутри этого шага. @@ -134,7 +139,7 @@ exec bash - Исходник глобальных правил лежит в `home-configs/GLOBAL_RULES.md`. - При запуске глобальные правила пишутся в `~/.config/ai-setup/global_rules.md`. -При запуске `ai-setup.sh` сразу обновляются native rule-файлы: +При запуске `scripts/ai-setup.sh` сразу обновляются native rule-файлы: - `~/.codex/AGENTS.md` - `~/.kimi-code/AGENTS.md` @@ -182,16 +187,16 @@ exec bash Также скрипт генерирует `~/.local/bin/claude-gpt-effort-proxy.py` — легковесный прокси, который маппит `xhigh` → `high` для `claude-code-proxy` (GPT-бэкенд). Без него Claude Code не смог бы использовать `xhigh` effort с GPT. -## Сетевые скрипты (network/) +## Сетевые скрипты (scripts/) -Скрипты в `home-configs/network/` **не запускаются автоматически** — ни `ai-setup.sh`, ни системой. Это ручные утилиты, которые нужно запускать явно от root. +Скрипты в `scripts/` **не запускаются автоматически** — ни `setup.sh`, ни системой. Это ручные утилиты, которые нужно запускать явно от root (или через `bash setup.sh`). Предназначены для окружения с Amnezia VPN и UFW kill switch (весь трафик через VPN, без VPN - только локалка). ### ks-off.sh — временно отключить kill switch ```bash -sudo bash ~/path/to/home-configs/network/ks-off.sh +sudo bash scripts/ks-off.sh ``` Отключает UFW. После этого нужно вручную отключить Amnezia через её GUI - трафик пойдёт напрямую через провайдера (российский IP). Используется когда нужен доступ к сайтам, которые блокируют VPN (ozon.ru и т.п.). @@ -201,7 +206,7 @@ sudo bash ~/path/to/home-configs/network/ks-off.sh ### ks-on.sh — восстановить kill switch ```bash -sudo bash ~/path/to/home-configs/network/ks-on.sh +sudo bash scripts/ks-on.sh ``` Включает UFW обратно. Перед запуском нужно подключить Amnezia через GUI - иначе скрипт предупредит, что интерфейс `amn0` не найден, и спросит подтверждение (без VPN весь интернет заблокируется). @@ -211,12 +216,12 @@ sudo bash ~/path/to/home-configs/network/ks-on.sh ``` # Нужен доступ к ru-сайтам напрямую: 1. Выйти из Claude Code -2. sudo bash ks-off.sh +2. sudo bash scripts/ks-off.sh 3. Отключить Amnezia в GUI # Возврат к нормальному режиму: 4. Подключить Amnezia в GUI (дождаться amn0) -5. sudo bash ks-on.sh +5. sudo bash scripts/ks-on.sh 6. Войти в Claude Code ``` @@ -229,4 +234,4 @@ bash tests/test_fixes.sh bash test_isolated.sh ``` -`tests/test_fixes.sh` проверяет структуру `ai-setup.sh` и синтаксис bash. `test_isolated.sh` проверяет автоустановочные URL для `ai-gpt` и `ai-kimi` через mock `curl`. +`tests/test_fixes.sh` проверяет структуру `scripts/ai-setup.sh` и синтаксис bash. `test_isolated.sh` проверяет автоустановочные URL для `ai-gpt` и `ai-kimi` через mock `curl`. diff --git a/home-configs/network/README.md b/home-configs/network/README.md index 41894da..3e33dde 100644 --- a/home-configs/network/README.md +++ b/home-configs/network/README.md @@ -70,7 +70,7 @@ before.rules: 10/8, 172.16/12, ### Первый запуск / обновление ```bash -sudo bash home-configs/network/ru-bypass.sh +sudo bash scripts/ru-bypass.sh ``` Скрипт сам установит сервисы, добавит правило UFW и настроит NM dispatcher. @@ -112,7 +112,7 @@ IP, например для оплаты или личного кабинета) ### ks-off.sh - отключить kill switch ```bash -sudo bash home-configs/network/ks-off.sh +sudo bash scripts/ks-off.sh ``` Отключает UFW. После этого - отключить Amnezia через GUI. Трафик пойдёт напрямую через @@ -123,7 +123,7 @@ sudo bash home-configs/network/ks-off.sh ### ks-on.sh - восстановить kill switch ```bash -sudo bash home-configs/network/ks-on.sh +sudo bash scripts/ks-on.sh ``` Сначала подключи Amnezia через GUI (дождись появления amn0), потом запускай. Иначе diff --git a/ai-setup.sh b/scripts/ai-setup.sh similarity index 99% rename from ai-setup.sh rename to scripts/ai-setup.sh index 2086965..b43150f 100755 --- a/ai-setup.sh +++ b/scripts/ai-setup.sh @@ -8,7 +8,7 @@ CONFIG_DIR="$HOME/.config/ai-setup" BIN_DIR="$HOME/.local/bin" NPM_GLOBAL="$HOME/.npm-global" PROXY_BIN="$BIN_DIR/claude-code-proxy" -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" GLOBAL_RULES_SOURCE="$SCRIPT_DIR/home-configs/GLOBAL_RULES.md" RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; NC='\033[0m' diff --git a/home-configs/network/ks-off.sh b/scripts/ks-off.sh similarity index 100% rename from home-configs/network/ks-off.sh rename to scripts/ks-off.sh diff --git a/home-configs/network/ks-on.sh b/scripts/ks-on.sh similarity index 100% rename from home-configs/network/ks-on.sh rename to scripts/ks-on.sh diff --git a/home-configs/network/ru-bypass.sh b/scripts/ru-bypass.sh similarity index 100% rename from home-configs/network/ru-bypass.sh rename to scripts/ru-bypass.sh diff --git a/setup.sh b/setup.sh new file mode 100755 index 0000000..fe3105d --- /dev/null +++ b/setup.sh @@ -0,0 +1,74 @@ +#!/bin/bash +# Мастер-скрипт. Запускай от обычного пользователя (sudo попросит сам где нужно). +cd "$(dirname "$0")" + +BLD='\033[1m' +GRN='\033[0;32m' +YEL='\033[0;33m' +GRY='\033[0;37m' +CLR='\033[0m' + +echo "" +echo -e "${BLD}=== AI Setup ===${CLR}" +echo "" +echo -e "${YEL}Шаги для новой машины (выполнить по порядку):${CLR}" +echo "" +echo -e " ${BLD}1) AI-инструменты${CLR}" +echo -e " ${GRY}Устанавливает ai-claude, ai-gpt, ai-deepseek, ai-gemini и др.${CLR}" +echo -e " ${GRY}Запрашивает API-ключи. Запускать один раз.${CLR}" +echo "" +echo -e " ${BLD}2) Сеть: ru-bypass + kill switch${CLR}" +echo -e " ${GRY}.ru сайты (ozon, госуслуги) — напрямую с российским IP.${CLR}" +echo -e " ${GRY}*.loc офисные адреса — тоже напрямую.${CLR}" +echo -e " ${GRY}Всё остальное — только через Amnezia (kill switch).${CLR}" +echo -e " ${GRY}Запускать один раз на каждой машине.${CLR}" +echo "" +echo -e "${YEL}Дополнительно (по необходимости):${CLR}" +echo "" +echo -e " ${BLD}3) Отключить kill switch${CLR}" +echo -e " ${GRY}Временно — когда нужен прямой доступ без VPN (российский IP).${CLR}" +echo "" +echo -e " ${BLD}4) Включить kill switch${CLR}" +echo -e " ${GRY}Вернуть защиту обратно после отключения.${CLR}" +echo "" +echo -n "Выбери [1-4] или Enter для выхода: " +read -r choice +echo "" + +case "$choice" in + 1) + bash scripts/ai-setup.sh + ;; + 2) + echo -e "${GRY}Нужно указать два параметра твоей локальной сети:${CLR}" + echo -e "${GRY} GATEWAY — IP домашнего/офисного роутера (через него пойдёт .ru трафик напрямую)${CLR}" + echo -e "${GRY} DEV — сетевой интерфейс (wifi или провод), через который ты подключён к роутеру${CLR}" + echo "" + echo "Текущие маршруты (подсказка):" + ip route show default + echo "" + read -rp "GATEWAY (IP роутера) [192.168.1.1]: " gw + read -rp "DEV (интерфейс) [wlp1s0]: " dev + gw="${gw:-192.168.1.1}" + dev="${dev:-wlp1s0}" + echo "" + sudo GATEWAY="$gw" DEV="$dev" bash scripts/ru-bypass.sh + ;; + 3) + echo -e "${YEL}Перед этим выйди из Claude Code — сессия сменит IP.${CLR}" + echo -n "Продолжить? [y/N] " + read -r confirm + [ "$confirm" = "y" ] || [ "$confirm" = "Y" ] || exit 0 + sudo bash scripts/ks-off.sh + ;; + 4) + sudo bash scripts/ks-on.sh + ;; + "") + exit 0 + ;; + *) + echo "Неверный выбор." + exit 1 + ;; +esac diff --git a/test_isolated.sh b/test_isolated.sh index 4171e6c..17aa771 100644 --- a/test_isolated.sh +++ b/test_isolated.sh @@ -12,12 +12,12 @@ BIN_DIR="$TMPDIR/bin" mkdir -p "$BIN_DIR" # Извлекаем ai-gpt -awk '/^cat > "\$BIN_DIR\/ai-gpt"/,/^GPTEOF/' ai-setup.sh | \ +awk '/^cat > "\$BIN_DIR\/ai-gpt"/,/^GPTEOF/' scripts/ai-setup.sh | \ sed "s|\\\$BIN_DIR|$BIN_DIR|g" | bash chmod +x "$BIN_DIR/ai-gpt" # Извлекаем ai-kimi -awk '/^cat > "\$BIN_DIR\/ai-kimi"/,/^KIMIEOF/' ai-setup.sh | \ +awk '/^cat > "\$BIN_DIR\/ai-kimi"/,/^KIMIEOF/' scripts/ai-setup.sh | \ sed "s|\\\$BIN_DIR|$BIN_DIR|g" | bash chmod +x "$BIN_DIR/ai-kimi" diff --git a/tests/test_fixes.sh b/tests/test_fixes.sh index 58f4615..1fbd67d 100755 --- a/tests/test_fixes.sh +++ b/tests/test_fixes.sh @@ -4,7 +4,7 @@ set -euo pipefail -SCRIPT="$(cd "$(dirname "$0")/.." && pwd)/ai-setup.sh" +SCRIPT="$(cd "$(dirname "$0")/.." && pwd)/scripts/ai-setup.sh" GLOBAL_RULES_SOURCE="$(cd "$(dirname "$0")/.." && pwd)/home-configs/GLOBAL_RULES.md" PASS=0; FAIL=0