feat(qwen): add ai-qwen launcher for Alibaba Token Plan (Qwen3.8)

ai-qwen runs Claude Code through Alibaba Cloud Model Studio's
Anthropic-compatible Token Plan endpoint
(token-plan.ap-southeast-1.maas.aliyuncs.com/apps/anthropic). The shared
key is built into the generated script, so it starts right away without
asking for a key.

qwen3.8-max (the smartest model the key has) is in opus/sonnet and for
subagents, --model opus on each start; qwen3.8-flash is in haiku for
background tasks. Measured on 20.10: both models accept up to 983616
input tokens (CLAUDE_CODE_MAX_CONTEXT_TOKENS=1000000, autocompact fires
before the API limit) and see images. Qwen validates
output_config.effort (bogus -> 400), Max shows no trend from low to
max, Flash thinks ~2x longer on max; the launcher starts on --effort max
like ai-mimo, EFFORT_MAPPING.md records the measurements.

setup.sh status, statusline brand color, README, QUICK_START and
AGENTS.md list the new launcher.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Виталий Никитенко
2026-10-20 12:01:31 +07:00
parent 41c5cf9b10
commit 0502478081
8 changed files with 119 additions and 10 deletions

View File

@@ -2219,6 +2219,54 @@ claude --dangerously-skip-permissions --model opus --effort "${AI_EFFORT:-max}"
MIMOEOF
chmod +x "$BIN_DIR/ai-mimo"
# === ai-qwen ===
cat > "$BIN_DIR/ai-qwen" << 'QWENEOF'
#!/usr/bin/env bash
# ai-qwen - запуск Claude Code через Alibaba Cloud Model Studio (Qwen 3.8, Token Plan,
# Anthropic-compatible API). Ключ общий и вшит в скрипт: запускается сразу, без ввода ключа.
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/ai-api-helpers.sh" 2>/dev/null || true
qwen_base_url="https://token-plan.ap-southeast-1.maas.aliyuncs.com/apps/anthropic"
api_key="sk-sp-H.LEDIL.UJfr.MEUCIBmN5Rtjyn9iKPnhw2sym_1auFL4YZ4tnJh54TurNMo8AiEA1SbkS2Gt872ncq-32xK2ZxlpZxS3ldNHnTgX6dNCIok"
_PROMPT_FILE=$(mktemp /tmp/ai-sys-prompt.XXXXXX)
trap 'rm -f "$_PROMPT_FILE"' EXIT INT TERM
_build_ai_sys_prompt > "$_PROMPT_FILE"
export AI_LAUNCHER=qwen
export CLAUDE_CONFIG_DIR="$HOME/.config/ai-setup/cfg/qwen"
# Модели (список ключа: .../compatible-mode/v1/models): qwen3.8-max - самая умная, она в
# opus/sonnet и в сабагентах; haiku = qwen3.8-flash (быстрая, Claude Code берёт слот haiku
# и для фоновых задач вроде заголовков - так дешевле для лимита Token Plan).
# availableModels НЕ задаём (он схлопывает пикер). --model opus при каждом запуске, как в ai-mimo.
# Окно: у обеих моделей вход до 983616 токенов (замер 20.10: ответ "Range of input length
# should be [1, 983616]"). qwen3.8-* нет в реестре Claude Code, без
# CLAUDE_CODE_MAX_CONTEXT_TOKENS окно считалось бы = 200K. Автокомпакт с окном 1000000
# срабатывает раньше предела API. Картинки обе модели видят сами.
# Effort Qwen проверяет (bogus -> 400, low/medium/high/xhigh/max принимаются), но у Max тренда
# нет, у Flash max размышляет почти вдвое дольше low (см. EFFORT_MAPPING.md). Стартуем на max
# через CLI --effort, как ai-mimo. CLAUDE_CODE_ALWAYS_ENABLE_EFFORT - страховка, как в ai-glm.
# CLAUDE_CODE_MAX_OUTPUT_TOKENS=64000 вместо дефолтных 32000, как у ai-glm.
_setup_isolated_config qwen opus high ''
ANTHROPIC_BASE_URL="$qwen_base_url" \
ANTHROPIC_AUTH_TOKEN="$api_key" \
ANTHROPIC_DEFAULT_OPUS_MODEL=qwen3.8-max \
ANTHROPIC_DEFAULT_OPUS_MODEL_NAME="Qwen3.8 Max" \
ANTHROPIC_DEFAULT_OPUS_MODEL_DESCRIPTION="Qwen3.8 Max - флагман Alibaba для сложных задач" \
ANTHROPIC_DEFAULT_SONNET_MODEL=qwen3.8-max \
ANTHROPIC_DEFAULT_SONNET_MODEL_NAME="Qwen3.8 Max" \
ANTHROPIC_DEFAULT_SONNET_MODEL_DESCRIPTION="Qwen3.8 Max - флагман Alibaba для сложных задач" \
ANTHROPIC_DEFAULT_HAIKU_MODEL=qwen3.8-flash \
ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME="Qwen3.8 Flash" \
ANTHROPIC_DEFAULT_HAIKU_MODEL_DESCRIPTION="Qwen3.8 Flash - быстрая" \
CLAUDE_CODE_SUBAGENT_MODEL=qwen3.8-max \
CLAUDE_CODE_MAX_CONTEXT_TOKENS=1000000 \
CLAUDE_CODE_MAX_OUTPUT_TOKENS=64000 \
CLAUDE_CODE_ALWAYS_ENABLE_EFFORT=1 \
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 \
claude --dangerously-skip-permissions --model opus --effort "${AI_EFFORT:-max}" --system-prompt-file "$_PROMPT_FILE" "$@"
QWENEOF
chmod +x "$BIN_DIR/ai-qwen"
# === ai-openrouter ===
cat > "$BIN_DIR/ai-openrouter" << 'OPENROUTEREOF'
#!/usr/bin/env bash
@@ -2523,6 +2571,7 @@ _setup_isolated_config glm opus xhigh ''
_setup_isolated_config eltex opus xhigh ''
_setup_isolated_config eltex-qwen opus high ''
_setup_isolated_config mimo opus high ''
_setup_isolated_config qwen opus high ''
_setup_isolated_config openrouter "openai/gpt-5.5" high ''
_setup_isolated_config opencode deepseek-v4-pro high ''
@@ -2533,7 +2582,7 @@ rm -f "$BIN_DIR/claude_gpt" "$BIN_DIR/claude_deepseek" "$BIN_DIR/claude_kimi" "$
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-glm" "$HOME/.local/bin/ai-eltex" "$HOME/.local/bin/ai-eltex-qwen" "$HOME/.local/bin/ai-mimo" "$HOME/.local/bin/ai-openrouter" "$HOME/.local/bin/ai-gemini" "$HOME/.local/bin/ai-cursor" "$HOME/.local/bin/ai-claude" \
"$HOME/.local/bin/ai-glm" "$HOME/.local/bin/ai-eltex" "$HOME/.local/bin/ai-eltex-qwen" "$HOME/.local/bin/ai-mimo" "$HOME/.local/bin/ai-qwen" "$HOME/.local/bin/ai-openrouter" "$HOME/.local/bin/ai-gemini" "$HOME/.local/bin/ai-cursor" "$HOME/.local/bin/ai-claude" \
"$HOME/.local/bin/ai-opencode" \
"$HOME/.local/bin/ai-api-helpers.sh" "$HOME/.local/bin/claude-gpt-effort-proxy.py"
fi
@@ -2556,6 +2605,7 @@ echo -e " ${CYAN}ai-glm${NC} - GLM 5.3 (через Claude Code, Z
echo -e " ${CYAN}ai-eltex${NC} - Корпоративный LLM-прокси Eltex (через Claude Code, ключ от админов)"
echo -e " ${CYAN}ai-eltex-qwen${NC} - Корпоративный LLM-прокси Eltex, модели Qwen (через Claude Code, свой ключ)"
echo -e " ${CYAN}ai-mimo${NC} - Xiaomi MiMo V2.6 Pro, максимум рассуждений (через Claude Code, Token Plan)"
echo -e " ${CYAN}ai-qwen${NC} - Qwen3.8 Max (через Claude Code, Alibaba Token Plan, ключ встроен)"
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 ""