Compare commits
2 Commits
7304c5c84b
...
60b915de5f
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
60b915de5f | ||
|
|
f61f2cde84 |
@@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
## Таблица маппинга
|
## Таблица маппинга
|
||||||
|
|
||||||
| Claude Code `/effort` | Anthropic (`ai-claude`) | DeepSeek V4 (`ai-deepseek`) | Kimi K2.7/K2.6 (`ai-kimi`) | GLM 5.2 (`ai-glm`) | OpenRouter/GPT-5.5 (`ai-openrouter`) | OpenCode Go (`ai-opencode`) |
|
| Claude Code `/effort` | Anthropic (`ai-claude`) | DeepSeek V4 (`ai-deepseek`) | Kimi K2.7/K2.6 (`ai-kimi`) | GLM 5.3 (`ai-glm`) | OpenRouter/GPT-5.5 (`ai-openrouter`) | OpenCode Go (`ai-opencode`) |
|
||||||
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
|:---:|:---:|:---:|:---:|:---:|:---:|:---:|
|
||||||
| `low` | нативно `low` | провайдер поднимает до `high` | thinking on | на стороне сервера | без локального маппинга | без локального маппинга |
|
| `low` | нативно `low` | провайдер поднимает до `high` | thinking on | на стороне сервера | без локального маппинга | без локального маппинга |
|
||||||
| `medium` | нативно `medium` | провайдер поднимает до `high` | thinking on | на стороне сервера | без локального маппинга | без локального маппинга |
|
| `medium` | нативно `medium` | провайдер поднимает до `high` | thinking on | на стороне сервера | без локального маппинга | без локального маппинга |
|
||||||
@@ -65,7 +65,7 @@ on / off
|
|||||||
- Градаций глубины reasoning нет.
|
- Градаций глубины reasoning нет.
|
||||||
- Дефолт `ai-kimi`: `high`.
|
- Дефолт `ai-kimi`: `high`.
|
||||||
|
|
||||||
### GLM 5.2 (Zhipu AI)
|
### GLM 5.3 (Zhipu AI)
|
||||||
|
|
||||||
```text
|
```text
|
||||||
high / max
|
high / max
|
||||||
@@ -99,7 +99,7 @@ Effort не преобразуется локально — thinking budget не
|
|||||||
| Anthropic | Не нужен | - |
|
| Anthropic | Не нужен | - |
|
||||||
| DeepSeek V4 | DeepSeek API | На стороне сервера |
|
| DeepSeek V4 | DeepSeek API | На стороне сервера |
|
||||||
| Kimi K2.7/K2.6 | Moonshot API | На стороне сервера |
|
| Kimi K2.7/K2.6 | Moonshot API | На стороне сервера |
|
||||||
| GLM 5.2 | Zhipu AI API | На стороне сервера |
|
| GLM 5.3 | Zhipu AI API | На стороне сервера |
|
||||||
| OpenRouter/GPT-5.5 | Локального маппинга нет | `ai-openrouter` отправляет значение как есть |
|
| OpenRouter/GPT-5.5 | Локального маппинга нет | `ai-openrouter` отправляет значение как есть |
|
||||||
| OpenCode Go | Локального маппинга нет | `ai-opencode` отправляет значение через routatic-proxy |
|
| OpenCode Go | Локального маппинга нет | `ai-opencode` отправляет значение через routatic-proxy |
|
||||||
| Legacy GPT proxy | helper-маппинг `xhigh` -> `high` | `~/bin/claude-gpt-effort-proxy.py` или `~/.local/bin/claude-gpt-effort-proxy.py` |
|
| Legacy GPT proxy | helper-маппинг `xhigh` -> `high` | `~/bin/claude-gpt-effort-proxy.py` или `~/.local/bin/claude-gpt-effort-proxy.py` |
|
||||||
|
|||||||
@@ -15,6 +15,11 @@ bash setup.sh
|
|||||||
exec bash
|
exec bash
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Обновление всех AI-инструментов одной командой:
|
||||||
|
```bash
|
||||||
|
./setup.sh update
|
||||||
|
```
|
||||||
|
|
||||||
## 2. Настроить сеть (Amnezia + ru-bypass)
|
## 2. Настроить сеть (Amnezia + ru-bypass)
|
||||||
|
|
||||||
Нужно один раз на каждой машине. .ru трафик идёт напрямую,
|
Нужно один раз на каждой машине. .ru трафик идёт напрямую,
|
||||||
|
|||||||
11
README.md
11
README.md
@@ -56,6 +56,15 @@ bash setup.sh
|
|||||||
exec bash
|
exec bash
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Обновление одной командой
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./setup.sh update # или: ./setup.sh --update
|
||||||
|
```
|
||||||
|
|
||||||
|
То же, что пункт меню `7) Обновить`: `git pull --ff-only` + перегенерация всех
|
||||||
|
`ai-*` лаунчеров через `scripts/ai-setup.sh`. Без аргументов открывается меню.
|
||||||
|
|
||||||
## Сеть: ru-bypass + kill switch
|
## Сеть: ru-bypass + kill switch
|
||||||
|
|
||||||
Полная документация: [`home-configs/network/README.md`](home-configs/network/README.md)
|
Полная документация: [`home-configs/network/README.md`](home-configs/network/README.md)
|
||||||
@@ -151,7 +160,7 @@ bash tests/test_network.sh # полные тесты
|
|||||||
- `ai-gpt` - нативный OpenAI Codex CLI
|
- `ai-gpt` - нативный OpenAI Codex CLI
|
||||||
- `ai-deepseek` - Claude Code через DeepSeek API
|
- `ai-deepseek` - Claude Code через DeepSeek API
|
||||||
- `ai-kimi` - Claude Code через официальный Kimi Code API (`api.kimi.com/coding`)
|
- `ai-kimi` - Claude Code через официальный Kimi Code API (`api.kimi.com/coding`)
|
||||||
- `ai-glm` - Claude Code через Zhipu AI GLM 5.2 API (`api.z.ai/api/anthropic`)
|
- `ai-glm` - Claude Code через Zhipu AI GLM 5.3 API (`api.z.ai/api/anthropic`)
|
||||||
- `ai-openrouter` - Claude Code через OpenRouter (GPT-5.5, Grok, Qwen, GLM 5.2 и др.)
|
- `ai-openrouter` - Claude Code через OpenRouter (GPT-5.5, Grok, Qwen, GLM 5.2 и др.)
|
||||||
- `ai-opencode` - Claude Code через OpenCode Go + routatic-proxy (DeepSeek, Kimi, Qwen, GLM, MiniMax, MiMo)
|
- `ai-opencode` - Claude Code через OpenCode Go + routatic-proxy (DeepSeek, Kimi, Qwen, GLM, MiniMax, MiMo)
|
||||||
- `ai-gemini` - нативный Antigravity CLI `agy`
|
- `ai-gemini` - нативный Antigravity CLI `agy`
|
||||||
|
|||||||
@@ -1560,7 +1560,7 @@ chmod +x "$BIN_DIR/ai-kimi"
|
|||||||
# === ai-glm ===
|
# === ai-glm ===
|
||||||
cat > "$BIN_DIR/ai-glm" << 'GLMEOF'
|
cat > "$BIN_DIR/ai-glm" << 'GLMEOF'
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# ai-glm - запуск Claude Code через Zhipu AI GLM 5.2 (Anthropic-compatible API)
|
# ai-glm - запуск Claude Code через Zhipu AI GLM 5.3 (Anthropic-compatible API)
|
||||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/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/glm_key"
|
key_file="$HOME/.config/ai-setup/glm_key"
|
||||||
@@ -1580,7 +1580,7 @@ glm_base_url="${GLM_BASE_URL:-https://api.z.ai/api/anthropic}"
|
|||||||
|
|
||||||
if [ -n "$api_key" ]; then
|
if [ -n "$api_key" ]; then
|
||||||
echo -n "Проверка сохранённого GLM ключа... "
|
echo -n "Проверка сохранённого GLM ключа... "
|
||||||
_claude_test_api "$glm_base_url/v1/messages" "x-api-key: $api_key" "glm-5.2"
|
_claude_test_api "$glm_base_url/v1/messages" "x-api-key: $api_key" "glm-5.3"
|
||||||
_handle_api_response "GLM" "$_CLAUDE_TEST_CODE" "$_CLAUDE_TEST_BODY" "Пополните баланс: https://z.ai/manage-apikey/apikey-list"
|
_handle_api_response "GLM" "$_CLAUDE_TEST_CODE" "$_CLAUDE_TEST_BODY" "Пополните баланс: https://z.ai/manage-apikey/apikey-list"
|
||||||
ret=$_API_RET
|
ret=$_API_RET
|
||||||
if [ $ret -eq 401 ]; then
|
if [ $ret -eq 401 ]; then
|
||||||
@@ -1621,7 +1621,7 @@ if [ -z "$api_key" ]; then
|
|||||||
[ -z "$api_key" ] && { echo "Выход."; exit 1; }
|
[ -z "$api_key" ] && { echo "Выход."; exit 1; }
|
||||||
|
|
||||||
echo -n "Проверяю ключ... "
|
echo -n "Проверяю ключ... "
|
||||||
_claude_test_api "$glm_base_url/v1/messages" "x-api-key: $api_key" "glm-5.2"
|
_claude_test_api "$glm_base_url/v1/messages" "x-api-key: $api_key" "glm-5.3"
|
||||||
_handle_api_response "GLM" "$_CLAUDE_TEST_CODE" "$_CLAUDE_TEST_BODY" "Пополните баланс: https://z.ai/manage-apikey/apikey-list"
|
_handle_api_response "GLM" "$_CLAUDE_TEST_CODE" "$_CLAUDE_TEST_BODY" "Пополните баланс: https://z.ai/manage-apikey/apikey-list"
|
||||||
ret=$_API_RET
|
ret=$_API_RET
|
||||||
if [ $ret -eq 0 ] || [ $ret -eq 429 ]; then
|
if [ $ret -eq 0 ] || [ $ret -eq 429 ]; then
|
||||||
@@ -1644,31 +1644,31 @@ trap 'rm -f "$_PROMPT_FILE"' EXIT INT TERM
|
|||||||
_build_ai_sys_prompt > "$_PROMPT_FILE"
|
_build_ai_sys_prompt > "$_PROMPT_FILE"
|
||||||
export AI_LAUNCHER=glm
|
export AI_LAUNCHER=glm
|
||||||
export CLAUDE_CONFIG_DIR="$HOME/.config/ai-setup/cfg/glm"
|
export CLAUDE_CONFIG_DIR="$HOME/.config/ai-setup/cfg/glm"
|
||||||
# Пикер: Opus/Sonnet = GLM 5.2, Haiku = GLM 5.2[1m]. availableModels НЕ задаём
|
# Пикер: Opus/Sonnet = GLM 5.3, Haiku = GLM 5.3[1m]. availableModels НЕ задаём
|
||||||
# (он схлопывает пикер). Claude Code навязывает 3 слота; незаданный показал бы
|
# (он схлопывает пикер). Claude Code навязывает 3 слота; незаданный показал бы
|
||||||
# чужой Claude, поэтому opus+sonnet = glm-5.2, haiku = glm-5.2[1m].
|
# чужой Claude, поэтому opus+sonnet = glm-5.3, haiku = glm-5.3[1m].
|
||||||
_setup_isolated_config glm opus high ''
|
_setup_isolated_config glm opus high ''
|
||||||
# ai-glm стартует на /effort max. max невалиден в settings.json (там только
|
# ai-glm стартует на /effort max. max невалиден в settings.json (там только
|
||||||
# low/medium/high/xhigh), поэтому задаём через CLI --effort, а не _apply_effort.
|
# low/medium/high/xhigh), поэтому задаём через CLI --effort, а не _apply_effort.
|
||||||
# CLAUDE_CODE_ALWAYS_ENABLE_EFFORT заставляет Claude Code отправлять effort в API
|
# CLAUDE_CODE_ALWAYS_ENABLE_EFFORT заставляет Claude Code отправлять effort в API
|
||||||
# для GLM (иначе glm-5.2 не распознан как effort-capable и параметр не уходит).
|
# для GLM (иначе glm-5.3 не распознан как effort-capable и параметр не уходит).
|
||||||
# /effort внутри сессии работает; ручной override запуска: AI_EFFORT=high ai-glm.
|
# /effort внутри сессии работает; ручной override запуска: AI_EFFORT=high ai-glm.
|
||||||
# CLAUDE_CODE_DISABLE_1M_CONTEXT НЕ выставляем: GLM 5.2 реально держит 1M контекста,
|
# CLAUDE_CODE_DISABLE_1M_CONTEXT НЕ выставляем: GLM 5.3 реально держит 1M контекста,
|
||||||
# а флаг заставлял бы счётчик ctx: считать окно = 200K (врал в ~5 раз). Прочие
|
# а флаг заставлял бы счётчик ctx: считать окно = 200K (врал в ~5 раз). Прочие
|
||||||
# лаунчеры (deepseek/kimi/openrouter/opencode) флаг оставляют — у них другой контекст
|
# лаунчеры (deepseek/kimi/openrouter/opencode) флаг оставляют — у них другой контекст
|
||||||
# и флаг убирает [1M]-дубли из пикера; ai-claude его и так не использует.
|
# и флаг убирает [1M]-дубли из пикера; ai-claude его и так не использует.
|
||||||
ANTHROPIC_BASE_URL="$glm_base_url" \
|
ANTHROPIC_BASE_URL="$glm_base_url" \
|
||||||
ANTHROPIC_AUTH_TOKEN="$api_key" \
|
ANTHROPIC_AUTH_TOKEN="$api_key" \
|
||||||
ANTHROPIC_DEFAULT_OPUS_MODEL=glm-5.2 \
|
ANTHROPIC_DEFAULT_OPUS_MODEL=glm-5.3 \
|
||||||
ANTHROPIC_DEFAULT_OPUS_MODEL_NAME="GLM 5.2" \
|
ANTHROPIC_DEFAULT_OPUS_MODEL_NAME="GLM 5.3" \
|
||||||
ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION="GLM 5.2 — флагман Zhipu AI" \
|
ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION="GLM 5.3 — флагман Zhipu AI" \
|
||||||
ANTHROPIC_DEFAULT_SONNET_MODEL=glm-5.2 \
|
ANTHROPIC_DEFAULT_SONNET_MODEL=glm-5.3 \
|
||||||
ANTHROPIC_DEFAULT_SONNET_MODEL_NAME="GLM 5.2" \
|
ANTHROPIC_DEFAULT_SONNET_MODEL_NAME="GLM 5.3" \
|
||||||
ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION="GLM 5.2 — флагман Zhipu AI" \
|
ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION="GLM 5.3 — флагман Zhipu AI" \
|
||||||
ANTHROPIC_DEFAULT_HAIKU_MODEL='glm-5.2[1m]' \
|
ANTHROPIC_DEFAULT_HAIKU_MODEL='glm-5.3[1m]' \
|
||||||
ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME="GLM 5.2 [1M]" \
|
ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME="GLM 5.3 [1M]" \
|
||||||
ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION="GLM 5.2 [1M] — расширенный контекст" \
|
ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION="GLM 5.3 [1M] — расширенный контекст" \
|
||||||
CLAUDE_CODE_SUBAGENT_MODEL=glm-5.2 \
|
CLAUDE_CODE_SUBAGENT_MODEL=glm-5.3 \
|
||||||
CLAUDE_CODE_ALWAYS_ENABLE_EFFORT=1 \
|
CLAUDE_CODE_ALWAYS_ENABLE_EFFORT=1 \
|
||||||
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 \
|
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 \
|
||||||
claude --dangerously-skip-permissions --effort "${AI_EFFORT:-max}" --system-prompt-file "$_PROMPT_FILE" "$@"
|
claude --dangerously-skip-permissions --effort "${AI_EFFORT:-max}" --system-prompt-file "$_PROMPT_FILE" "$@"
|
||||||
@@ -2005,7 +2005,7 @@ echo " На базе Claude Code:"
|
|||||||
echo -e " ${CYAN}ai-claude${NC} - Оригинальный Claude Code (Anthropic)"
|
echo -e " ${CYAN}ai-claude${NC} - Оригинальный Claude Code (Anthropic)"
|
||||||
echo -e " ${CYAN}ai-deepseek${NC} - DeepSeek (через Claude Code, API ключ сохраняется)"
|
echo -e " ${CYAN}ai-deepseek${NC} - DeepSeek (через Claude Code, API ключ сохраняется)"
|
||||||
echo -e " ${CYAN}ai-kimi${NC} - Kimi K2.7 Code (через Claude Code, API ключ сохраняется)"
|
echo -e " ${CYAN}ai-kimi${NC} - Kimi K2.7 Code (через Claude Code, API ключ сохраняется)"
|
||||||
echo -e " ${CYAN}ai-glm${NC} - GLM 5.2 (через Claude Code, Zhipu AI API)"
|
echo -e " ${CYAN}ai-glm${NC} - GLM 5.3 (через Claude Code, Zhipu AI API)"
|
||||||
echo -e " ${CYAN}ai-openrouter${NC} - OpenRouter (через Claude Code: GPT-5.5, Grok, Qwen, GLM 5.2 и др.)"
|
echo -e " ${CYAN}ai-openrouter${NC} - OpenRouter (через Claude Code: GPT-5.5, Grok, Qwen, GLM 5.2 и др.)"
|
||||||
echo -e " ${CYAN}ai-opencode${NC} - OpenCode Go (через Claude Code + routatic-proxy: DeepSeek, Kimi, Qwen, GLM, MiniMax, MiMo)"
|
echo -e " ${CYAN}ai-opencode${NC} - OpenCode Go (через Claude Code + routatic-proxy: DeepSeek, Kimi, Qwen, GLM, MiniMax, MiMo)"
|
||||||
echo ""
|
echo ""
|
||||||
|
|||||||
35
setup.sh
35
setup.sh
@@ -18,6 +18,34 @@ mkdir -p "$HOME/.config/ai-setup"
|
|||||||
LOG="$HOME/.config/ai-setup/setup.log"
|
LOG="$HOME/.config/ai-setup/setup.log"
|
||||||
_log() { printf '%s [%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$1" "$2" >> "$LOG"; }
|
_log() { printf '%s [%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$1" "$2" >> "$LOG"; }
|
||||||
|
|
||||||
|
# Обновление: git pull + перегенерация всех ai-* лаунчеров (пункт меню 7)
|
||||||
|
do_update() {
|
||||||
|
local repo_dir
|
||||||
|
repo_dir="$(pwd)"
|
||||||
|
echo -e "${BLD}Обновляем репозиторий...${CLR}"
|
||||||
|
git -C "$repo_dir" pull --ff-only
|
||||||
|
echo ""
|
||||||
|
echo -e "${BLD}Перегенерация скриптов...${CLR}"
|
||||||
|
bash "$repo_dir/scripts/ai-setup.sh"
|
||||||
|
}
|
||||||
|
|
||||||
|
# CLI-режим: ./setup.sh update (или --update) — обновление без меню
|
||||||
|
case "${1:-}" in
|
||||||
|
update|--update)
|
||||||
|
_log "setup" "update (CLI) на $(hostname)"
|
||||||
|
do_update
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
"")
|
||||||
|
# без аргументов — интерактивное меню ниже
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Неизвестный аргумент: $1"
|
||||||
|
echo "Использование: ./setup.sh [update] — без аргументов открывается меню"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
if command -v whiptail >/dev/null 2>&1; then
|
if command -v whiptail >/dev/null 2>&1; then
|
||||||
MENU_ARGS=()
|
MENU_ARGS=()
|
||||||
MENU_ARGS+=("1" "AI-инструменты (установить лаунчеры + ключи)")
|
MENU_ARGS+=("1" "AI-инструменты (установить лаунчеры + ключи)")
|
||||||
@@ -248,12 +276,7 @@ case "$choice" in
|
|||||||
bash tests/test_network.sh
|
bash tests/test_network.sh
|
||||||
;;
|
;;
|
||||||
7)
|
7)
|
||||||
REPO_DIR="$(cd "$(dirname "$0")" && pwd)"
|
do_update
|
||||||
echo -e "${BLD}Обновляем репозиторий...${CLR}"
|
|
||||||
git -C "$REPO_DIR" pull --ff-only
|
|
||||||
echo ""
|
|
||||||
echo -e "${BLD}Перегенерация скриптов...${CLR}"
|
|
||||||
bash "$REPO_DIR/scripts/ai-setup.sh"
|
|
||||||
;;
|
;;
|
||||||
8)
|
8)
|
||||||
bash scripts/ai-setup.sh
|
bash scripts/ai-setup.sh
|
||||||
|
|||||||
@@ -85,12 +85,12 @@ test_glm_claude_launcher() {
|
|||||||
# ── ai-glm: uses official Zhipu AI API ────────────────────────────────────
|
# ── ai-glm: uses official Zhipu AI API ────────────────────────────────────
|
||||||
test_glm_official_api() {
|
test_glm_official_api() {
|
||||||
if echo "$GLM_SECTION" | grep -q 'api.z.ai/api/anthropic' \
|
if echo "$GLM_SECTION" | grep -q 'api.z.ai/api/anthropic' \
|
||||||
&& echo "$GLM_SECTION" | grep -q 'ANTHROPIC_DEFAULT_OPUS_MODEL=glm-5.2' \
|
&& echo "$GLM_SECTION" | grep -q 'ANTHROPIC_DEFAULT_OPUS_MODEL=glm-5.3' \
|
||||||
&& echo "$GLM_SECTION" | grep -q "ANTHROPIC_DEFAULT_HAIKU_MODEL='glm-5.2\[1m\]'" \
|
&& echo "$GLM_SECTION" | grep -q "ANTHROPIC_DEFAULT_HAIKU_MODEL='glm-5.3\[1m\]'" \
|
||||||
&& echo "$GLM_SECTION" | grep -q 'x-api-key'; then
|
&& echo "$GLM_SECTION" | grep -q 'x-api-key'; then
|
||||||
ok "ai-glm: uses official Zhipu AI API (glm-5.2 opus/sonnet, glm-5.2[1m] haiku)"
|
ok "ai-glm: uses official Zhipu AI API (glm-5.3 opus/sonnet, glm-5.3[1m] haiku)"
|
||||||
else
|
else
|
||||||
fail "ai-glm: must use official Zhipu AI API with glm-5.2 and x-api-key"
|
fail "ai-glm: must use official Zhipu AI API with glm-5.3 and x-api-key"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user