Files
team/.devcontainer/templates/runcc.sh
T
2026-04-19 21:47:08 +08:00

86 lines
3.1 KiB
Bash

#!/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"}