86 lines
3.1 KiB
Bash
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"}
|