#!/bin/bash # OpenCode 启动脚本,支持通过参数选择 GLM 模型版本 # # 用法: runoc.sh [模型] # # 模型: 45|45a|45f|46|46v|46vf|47|5|5t|51 (默认 51) set -euo pipefail PROJECT_CONFIG="/workspace/opencode.json" GLOBAL_CONFIG="$HOME/.config/opencode/opencode.json" # 参数解析 MODEL_KEY="" while [ $# -gt 0 ]; do case "$1" in -h|--help) echo "用法: runoc.sh [模型]" echo "" echo "模型: 45|45a|45f|46|46v|46vf|47|5|5t|51 (默认 51)" exit 0 ;; *) MODEL_KEY="$1"; shift ;; esac done MODEL_KEY="${MODEL_KEY:-51}" case "$MODEL_KEY" in 45) MODEL="zhipuai-coding-plan/glm-4.5" ;; 45a) MODEL="zhipuai-coding-plan/glm-4.5-air" ;; 45f) MODEL="zhipuai-coding-plan/glm-4.5-flash" ;; 46) MODEL="zhipuai-coding-plan/glm-4.6" ;; 46v) MODEL="zhipuai-coding-plan/glm-4.6v" ;; 46vf) MODEL="zhipuai-coding-plan/glm-4.6v-flash" ;; 47) MODEL="zhipuai-coding-plan/glm-4.7" ;; 5) MODEL="zhipuai-coding-plan/glm-5" ;; 5t) MODEL="zhipuai-coding-plan/glm-5-turbo" ;; 51) MODEL="zhipuai-coding-plan/glm-5.1" ;; *) echo "未知模型: $MODEL_KEY (可选: 45|45a|45f|46|46v|46vf|47|5|5t|51)" exit 1 ;; esac # ── tmux 模型传播(确保子 pane 能获取正确模型)───────── if [ -n "${TMUX:-}" ]; then SESSION_ID="$(tmux display-message -p '#{session_id}')" # session 级环境变量 tmux setenv -t "$SESSION_ID" OPENCODE_MODEL "$MODEL" # pane 级选项(.bashrc 会在新 shell 启动时读取) tmux set-option -p @opencode_model "$MODEL" fi # ── OpenCode 自更新检查(每日一次)── LAST_UPDATE_FILE="$HOME/.cache/opencode_update_last_run" TODAY=$(date +%Y-%m-%d) mkdir -p "$(dirname "$LAST_UPDATE_FILE")" if [ ! -f "$LAST_UPDATE_FILE" ] || [ "$(cat "$LAST_UPDATE_FILE" 2>/dev/null)" != "$TODAY" ]; then opencode upgrade 2>/dev/null || true echo "$TODAY" > "$LAST_UPDATE_FILE" fi # ── 构建启动参数 ── OC_ARGS=(-m "$MODEL") echo "启动 OpenCode (模型: $MODEL)" opencode "${OC_ARGS[@]}"