feat: брендовые цвета имён моделей, персистентность model между сессиями

- _brand_color: цвет имени модели по AI_LAUNCHER
  deepseek=синий(69), claude=оранжевый(173), kimi=голубой(81),
  openrouter=фиолетовый(135), остальные=кремовый(223)
- _restore_model / _restore_model_str: сохранение и восстановление
  model_id в кэше лаунчера (~/.cache/ai-setup/model_<launcher>)
- effort-save-hook также сохраняет model_id при завершении сессии
- ai-claude/ai-openrouter используют восстановленную модель при старте

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-06-11 22:45:49 +03:00
parent 54742d6a36
commit 222bb129eb
3 changed files with 84 additions and 28 deletions

View File

@@ -1106,6 +1106,44 @@ with open(settings_path, 'w') as f:
PYEOF
}
_restore_model() {
local default_model="${1:-}"
local launcher="${AI_LAUNCHER:-}"
[ -z "$launcher" ] && return
local model_file="$HOME/.cache/ai-setup/model_${launcher}"
local model
model=$(cat "$model_file" 2>/dev/null)
[ -z "$model" ] && model="$default_model"
[ -z "$model" ] && return
python3 - "$HOME/.claude/settings.json" "$model" <<'PYEOF'
import sys, json, os
settings_path, model = sys.argv[1], sys.argv[2]
data = {}
if os.path.exists(settings_path):
try:
with open(settings_path) as f:
data = json.load(f)
except Exception:
pass
data['model'] = model
with open(settings_path, 'w') as f:
json.dump(data, f, indent=2, ensure_ascii=False)
f.write('\n')
PYEOF
}
# _restore_model_str: возвращает сохранённую модель строкой (для ANTHROPIC_MODEL env var)
_restore_model_str() {
local default_model="${1:-}"
local launcher="${AI_LAUNCHER:-}"
[ -z "$launcher" ] && echo "$default_model" && return
local model_file="$HOME/.cache/ai-setup/model_${launcher}"
local model
model=$(cat "$model_file" 2>/dev/null)
[ -z "$model" ] && model="$default_model"
echo "$model"
}
_build_ai_sys_prompt() {
local global_rules="$HOME/.config/ai-setup/global_rules.md"
local global_rendered=""
@@ -1377,9 +1415,10 @@ trap 'rm -f "$_PROMPT_FILE"' EXIT INT TERM
_build_ai_sys_prompt > "$_PROMPT_FILE"
export AI_LAUNCHER=openrouter
_restore_effort high
_MODEL=$(_restore_model_str "openai/gpt-5.5")
ANTHROPIC_BASE_URL=https://openrouter.ai/api \
ANTHROPIC_AUTH_TOKEN="$api_key" \
ANTHROPIC_MODEL=openai/gpt-5.5 \
ANTHROPIC_MODEL=$_MODEL \
ANTHROPIC_DEFAULT_OPUS_MODEL=anthropic/claude-4.8-opus \
ANTHROPIC_DEFAULT_SONNET_MODEL=anthropic/claude-4.6-sonnet \
ANTHROPIC_DEFAULT_HAIKU_MODEL=openai/gpt-5.5 \
@@ -1431,7 +1470,8 @@ trap 'rm -f "$_PROMPT_FILE"' EXIT INT TERM
_build_ai_sys_prompt > "$_PROMPT_FILE"
export AI_LAUNCHER=claude
_restore_effort xhigh
claude --dangerously-skip-permissions --model sonnet --system-prompt-file "$_PROMPT_FILE" "$@"
_restore_model "sonnet"
claude --dangerously-skip-permissions --system-prompt-file "$_PROMPT_FILE" "$@"
CLAUDEEOF
chmod +x "$BIN_DIR/ai-claude"