diff --git a/AGENTS.md b/AGENTS.md index 9183b4a..369af2b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2,4 +2,4 @@ Данные правила применяются ко всем агентам, работающим конкретно в этом репозитории. -1. **Полная перегенерация 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). Скрипт обязан привести все генерируемые файлы к эталонному виду, однозначно определяемому текущей конфигурацией. +1. **Полная перегенерация standalone-скриптов при запуске сетап-скрипта (Full regeneration of standalone scripts on setup run):** При каждом запуске `ai-setup.sh` все генерируемые скрипты в `~/.local/bin/` (`ai-gpt`, `ai-deepseek`, `ai-kimi`, `ai-openrouter`, `ai-gemini`, `ai-api-helpers.sh`, `ai-claude`) должны быть **полностью перезаписаны** актуальными версиями. Запрещено выполнять слияние (merge) старого и нового содержимого или дополнение (append). Скрипт обязан привести все генерируемые файлы к эталонному виду, однозначно определяемому текущей конфигурацией. diff --git a/README.md b/README.md index ff315db..ba2dbaa 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Набор shell-лаунчеров для локальной установки и запуска нескольких AI coding CLI из единой точки входа. -Главный скрипт - `ai-setup.sh`. Он настраивает пользовательские директории, устанавливает глобальные правила агентов из `GLOBAL_RULES.md` и полностью перегенерирует standalone-скрипты в `~/.local/bin`. +Главный скрипт - `ai-setup.sh`. Он настраивает пользовательские директории, устанавливает глобальные правила агентов из `GLOBAL_RULES.md`, разворачивает кастомные скиллы и полностью перегенерирует standalone-скрипты в `~/.local/bin`. ## Что реально устанавливается и генерируется @@ -11,6 +11,8 @@ - `~/.local/bin` - standalone-лаунчеры и вспомогательные скрипты. - `~/.config/ai-setup` - сохранённые ключи и глобальные правила. - `~/.npm-global` - пользовательский npm prefix. +- `~/.claude/skills/` - кастомные скиллы для Claude Code. +- `~/.gemini/config/plugins/local-setup/skills/` - те же скиллы для Gemini/agy. После запуска генерируются или обновляются: @@ -18,6 +20,7 @@ - `~/.local/bin/ai-gpt` - `~/.local/bin/ai-deepseek` - `~/.local/bin/ai-kimi` +- `~/.local/bin/ai-openrouter` - `~/.local/bin/ai-gemini` - `~/.local/bin/ai-api-helpers.sh` - `~/.local/bin/claude-gpt-effort-proxy.py` @@ -30,20 +33,52 @@ ``` home-configs/ -├── GLOBAL_RULES.md # глобальные правила для всех агентов -└── claude/ - └── skills/ # кастомные скиллы для Claude Code - ├── el-review/ - │ └── SKILL.md - └── el-review-heavy/ - └── SKILL.md +├── GLOBAL_RULES.md # глобальные правила для всех агентов +├── claude/ +│ └── skills/ # кастомные скиллы для Claude Code (и Gemini) +│ ├── el-review/ +│ │ └── SKILL.md +│ └── el-review-heavy/ +│ └── SKILL.md +├── vless/ +│ └── servers.conf # список VLESS-серверов для прокси +├── proxychains/ +│ └── proxychains-xray.conf # конфиг proxychains (SOCKS5 через xray) +└── xray/ # (зарезервировано под будущие xray-конфиги) ``` При запуске `ai-setup.sh`: -- `GLOBAL_RULES.md` копируется в `~/.config/ai-setup/global_rules.md` и рассылается в нативные rule-файлы (`~/.claude/CLAUDE.md`, `~/.codex/AGENTS.md` и т.д.) -- Скиллы из `home-configs/claude/skills/` копируются в `~/.claude/skills/` +- `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`. -Также скрипт при отсутствии скачивает `~/.local/bin/claude-code-proxy`, но текущий `ai-gpt` запускает нативный Codex CLI и не использует старую proxy-логику через `ANTHROPIC_BASE_URL`. +Лаунчеры дополнительно обновляют native rule-файлы через helper `_build_ai_sys_prompt` при своём запуске. + +В native rule-файлы попадают только глобальные правила. Полный prompt с проектными `.md` используется в `ai-claude`, `ai-deepseek`, `ai-openrouter` и `ai-gemini`; `ai-gpt` и `ai-kimi` полагаются на native rule-файлы своих CLI. + +## VLESS / Xray (опционально) + +При запуске `ai-setup.sh` первым делом спрашивает, нужен ли режим VLESS-прокси: + +``` +Установить встроенный vless? [Y/n] +``` + +Если выбрать **Y** (по умолчанию): +- Читает список серверов из `home-configs/vless/servers.conf`. +- Реально проверяет каждый сервер: запускает `xray` с временным конфигом и тестирует curl'ом через SOCKS5. Работающие серверы помечаются зелёным, неработающие — красным. +- Пользователь выбирает сервер. +- Устанавливается Xray (`/usr/local/bin/xray`), генерируется конфиг (`/etc/xray/config.json`), создаётся и запускается systemd-сервис. +- Отключается IPv6 на уровне системы (VLESS с ним конфликтует). +- Устанавливается `proxychains-ng`. +- Firefox настраивается на SOCKS5 (`127.0.0.1:1080`) с remote DNS. +- Системный прокси (GNOME) настраивается для Chrome/Chromium. +- **Все лаунчеры оборачиваются в `proxychains4`** — трафик идёт через xray. + +Если выбрать **n** (direct-режим — или если ранее был включён VLESS, а теперь отключается): +- Останавливается и отключается systemd-сервис xray. +- Системный прокси сбрасывается в `none`. +- Firefox переключается на прямой доступ. +- IPv6 восстанавливается. ## Установка @@ -67,23 +102,31 @@ exec bash - `curl` - `python3` - Node.js/npm для npm-глобальных инструментов +- (опционально) `proxychains-ng` — для VLESS-режима +- (опционально) `gsettings` — для автонастройки системного прокси Если Node.js отсутствует, скрипт пытается поставить его автоматически для систем с `apt-get` или `dnf`. Для остальных систем Node.js нужно поставить вручную. ## Команды -- `ai-claude` - запускает оригинальный Claude Code через `claude`. -- `ai-gpt` - запускает нативный OpenAI Codex CLI, при отсутствии пытается поставить его через `https://chatgpt.com/codex/install.sh`. -- `ai-deepseek` - запускает Claude Code через DeepSeek Anthropic-compatible API, проверяет и сохраняет DeepSeek API key. -- `ai-kimi` - запускает Claude Code через официальный Kimi Code API (`https://api.kimi.com/coding/`), проверяет и сохраняет Kimi API key. -- `ai-gemini` - запускает нативный Antigravity CLI `agy`, при отсутствии пытается поставить его через `https://antigravity.google/cli/install.sh`. +**На базе Claude Code:** + +- `ai-claude` - запускает оригинальный Claude Code (Anthropic API). +- `ai-deepseek` - запускает Claude Code через DeepSeek Anthropic-compatible API. Проверяет и сохраняет DeepSeek API key. +- `ai-kimi` - запускает Claude Code через официальный Kimi Code API (`https://api.kimi.com/coding/`). Проверяет и сохраняет Kimi API key. +- `ai-openrouter` - запускает Claude Code через OpenRouter API (модели: GPT-5.5, Claude Opus 4.8, Claude Sonnet 4.6 и любые другие с OpenRouter). Проверяет и сохраняет OpenRouter API key. + +**Нативные CLI:** + +- `ai-gpt` - запускает нативный OpenAI Codex CLI. При отсутствии пытается поставить через `https://chatgpt.com/codex/install.sh` (fallback: npm). +- `ai-gemini` - запускает нативный Antigravity CLI `agy`. При отсутствии пытается поставить через `https://antigravity.google/cli/install.sh`. -Для `ai-gemini` скрипт в конце отдельно предупреждает использовать отдельный Google-аккаунт. ## Ключи и конфиги - DeepSeek key хранится в `~/.config/ai-setup/deepseek_key` с правами `600`. - Kimi key хранится в `~/.config/ai-setup/kimi_key` с правами `600`. +- OpenRouter key хранится в `~/.config/ai-setup/openrouter_key` с правами `600`. - Исходник глобальных правил лежит в `home-configs/GLOBAL_RULES.md`. - При запуске глобальные правила пишутся в `~/.config/ai-setup/global_rules.md`. @@ -96,14 +139,12 @@ exec bash Лаунчеры дополнительно обновляют эти файлы через helper `_build_ai_sys_prompt` при своём запуске. -В native rule-файлы попадают только глобальные правила. Полный prompt с проектными `.md` используется в `ai-claude`, `ai-deepseek` и `ai-gemini`; `ai-gpt` и `ai-kimi` полагаются на native rule-файлы своих CLI. - ## Права запуска агентов Лаунчеры запускают CLI в максимально свободном режиме: - `ai-gpt` использует `--dangerously-bypass-approvals-and-sandbox`. -- `ai-claude`, `ai-deepseek`, `ai-kimi` и `ai-gemini` используют `--dangerously-skip-permissions`. +- `ai-claude`, `ai-deepseek`, `ai-kimi`, `ai-openrouter` и `ai-gemini` используют `--dangerously-skip-permissions`. Это удобно для локального coding workflow, но это не sandbox для недоверенного кода. @@ -129,7 +170,13 @@ exec bash Правило этого проекта: -1. При каждом запуске `ai-setup.sh` все генерируемые standalone-скрипты в `~/.local/bin` должны полностью перезаписываться актуальными версиями. Merge и append старого содержимого запрещены. +1. При каждом запуске `ai-setup.sh` все генерируемые standalone-скрипты в `~/.local/bin` (`ai-gpt`, `ai-deepseek`, `ai-kimi`, `ai-openrouter`, `ai-gemini`, `ai-api-helpers.sh`, `ai-claude`) должны полностью перезаписываться актуальными версиями. Merge и append старого содержимого запрещены. + +## Effort Mapping + +В репозитории есть `EFFORT_MAPPING.md` — документ с полной таблицей маппинга effort-уровней между провайдерами (Anthropic, GPT-5.5, DeepSeek V4, Kimi K2.6, Gemini 3.x). Описывает, во что превращается `low`/`medium`/`high`/`xhigh`/`max` у каждого провайдера и где именно выполняется маппинг. + +Также скрипт генерирует `~/.local/bin/claude-gpt-effort-proxy.py` — легковесный прокси, который маппит `xhigh` → `high` для `claude-code-proxy` (GPT-бэкенд). Без него Claude Code не смог бы использовать `xhigh` effort с GPT. ## Тесты diff --git a/ai-setup.sh b/ai-setup.sh index c9a6e4f..c31ee43 100755 --- a/ai-setup.sh +++ b/ai-setup.sh @@ -1195,13 +1195,15 @@ echo -e "${GREEN} Установка завершена!${NC}" echo -e "${GREEN}════════════════════════════════════════════════════${NC}" echo "" echo "Доступные команды (теперь это независимые скрипты в ~/.local/bin):" -echo -e " ${CYAN}ai-claude${NC} - Оригинальный Claude Code (Anthropic)" -echo -e " ${CYAN}ai-gpt${NC} - OpenAI Codex (нативный CLI, автоустановка)" -echo -e " ${CYAN}ai-deepseek${NC} - DeepSeek (API ключ сохраняется)" -echo -e " ${CYAN}ai-kimi${NC} - Kimi K2.6 (через Claude Code, API ключ сохраняется)" -echo -e " ${CYAN}ai-openrouter${NC} - OpenRouter (через Claude Code, любые модели)" -echo -e " ${CYAN}ai-gemini${NC} - Gemini (нативный agy CLI, автоустановка)" echo "" -echo -e "${YELLOW}⚠️ Для Gemini используйте отдельный Google-аккаунт!${NC}" +echo " На базе Claude Code:" +echo -e " ${CYAN}ai-claude${NC} - Оригинальный Claude Code (Anthropic)" +echo -e " ${CYAN}ai-deepseek${NC} - DeepSeek (через Claude Code, API ключ сохраняется)" +echo -e " ${CYAN}ai-kimi${NC} - Kimi K2.6 (через Claude Code, API ключ сохраняется)" +echo -e " ${CYAN}ai-openrouter${NC} - OpenRouter (через Claude Code: GPT-5.5, Opus 4.8, Sonnet 4.6)" +echo "" +echo " Нативные CLI:" +echo -e " ${CYAN}ai-gpt${NC} - OpenAI Codex (нативный CLI, автоустановка)" +echo -e " ${CYAN}ai-gemini${NC} - Gemini (нативный agy CLI, автоустановка)" echo "" echo -e "Чтобы команды были доступны сразу, выполните: ${GREEN}exec bash${NC}"