#!/bin/bash # Claude Code 启动脚本,支持通过参数选择 GLM 模型版本 # # 固定版本: 2.1.112 (来自 /workspace/.devcontainer/.cache/npm/anthropic-ai-claude-code-2.1.112.tgz) # 注意: 不再执行自动更新,以保持版本稳定 SETTINGS_FILE="/workspace/.devcontainer/.volumes/claude/settings.json" # 参数解析: runcc.sh [--name <名称>] [模型] SESSION_NAME="" MODEL_KEY="" while [ $# -gt 0 ]; do case "$1" in --name|-n) [ $# -ge 2 ] || { echo "错误: --name 需要参数" >&2; exit 1; } SESSION_NAME="$2"; shift 2 ;; -h|--help) echo "用法: runcc.sh [--name <名称>] [模型]" echo "" echo "选项:" echo " --name, -n <名称> Claude Code 会话显示名称" echo "" echo "模型: 45|45a|46|47|5|5t|51 (默认 51)" exit 0 ;; *) MODEL_KEY="$1"; shift ;; esac done MODEL_KEY="${MODEL_KEY:-51}" # 默认使用 glm-5.1 case "$MODEL_KEY" in 45) MODEL="glm-4.5" ;; 45a) MODEL="glm-4.5-air" ;; 46) MODEL="glm-4.6" ;; 47) MODEL="glm-4.7" ;; 5) MODEL="glm-5" ;; 5t) MODEL="glm-5-turbo" ;; 51) MODEL="glm-5.1" ;; *) echo "未知模型: $MODEL_KEY (可选: 45|45a|46|47|5|5t|51)" exit 1 ;; esac # 从 settings.json 中移除模型相关配置(避免覆盖 shell 环境变量) if command -v jq &>/dev/null && [ -f "$SETTINGS_FILE" ]; then jq 'del(.env.ANTHROPIC_DEFAULT_OPUS_MODEL, .env.ANTHROPIC_DEFAULT_HAIKU_MODEL, .env.ANTHROPIC_DEFAULT_SONNET_MODEL)' \ "$SETTINGS_FILE" > "${SETTINGS_FILE}.tmp" \ && mv "${SETTINGS_FILE}.tmp" "$SETTINGS_FILE" fi # ── 模型环境变量(三个层级统一为同一模型)──────────────── export ANTHROPIC_DEFAULT_HAIKU_MODEL="$MODEL" export ANTHROPIC_DEFAULT_SONNET_MODEL="$MODEL" export ANTHROPIC_DEFAULT_OPUS_MODEL="$MODEL" # ── tmux 模型传播(确保子 pane 能获取正确模型)───────── if [ -n "${TMUX:-}" ]; then SESSION_ID="$(tmux display-message -p '#{session_id}')" # 层级 2: session 级环境变量(不同 session 隔离) tmux setenv -t "$SESSION_ID" ANTHROPIC_DEFAULT_OPUS_MODEL "$MODEL" tmux setenv -t "$SESSION_ID" ANTHROPIC_DEFAULT_HAIKU_MODEL "$MODEL" tmux setenv -t "$SESSION_ID" ANTHROPIC_DEFAULT_SONNET_MODEL "$MODEL" # 层级 3: pane 级选项(同 session 不同 pane 隔离) # .bashrc 会在新 shell 启动时读取此选项,覆盖 session 级设置 tmux set-option -p @anthropic_model "$MODEL" fi # 构建启动参数 CC_ARGS=(--ide --dangerously-skip-permissions --allow-dangerously-skip-permissions) # --name 不可靠(不写 custom-title/agent-name JSONL 记录), # 改用 /rename 斜杠命令作为初始提示,确保名称正确持久化 if [ -n "$SESSION_NAME" ]; then INITIAL_PROMPT="/rename $SESSION_NAME" fi echo "启动 Claude Code (模型: $MODEL${SESSION_NAME:+, 会话: $SESSION_NAME})" claude "${CC_ARGS[@]}" ${INITIAL_PROMPT:+"$INITIAL_PROMPT"}