ANTIDOTE_DIR="$HOME/.antidote" # 如果目录存在但文件缺失,视为损坏,直接删除 if [ -d "$ANTIDOTE_DIR" ] && [ ! -f "$ANTIDOTE_DIR/antidote.zsh" ]; then echo -e "${RED}发现损坏的 Antidote 安装,正在清理...${NC}" rm -rf "$ANTIDOTE_DIR" fi
if [ ! -d "$ANTIDOTE_DIR" ]; then if [ "$IS_CN" = true ]; then echo"尝试从镜像站克隆..." git clone --depth=1 https://mirror.ghproxy.com/https://github.com/mattmc3/antidote.git "$ANTIDOTE_DIR" fi
# 如果镜像站失败(或不是国内环境),尝试官方源 if [ ! -f "$ANTIDOTE_DIR/antidote.zsh" ]; then echo"尝试从 GitHub 官方克隆..." rm -rf "$ANTIDOTE_DIR"# 清理可能的空目录 git clone --depth=1 https://github.com/mattmc3/antidote.git "$ANTIDOTE_DIR" fi fi
# 最终检查 if [ ! -f "$ANTIDOTE_DIR/antidote.zsh" ]; then echo -e "${RED}❌ 致命错误: Antidote 下载失败。${NC}" echo -e "请检查网络连接 (是否能访问 github.com)。" exit 1 else echo -e "${GREEN}✅ Antidote 安装确认成功${NC}" fi
# --- 4. 修复 Oh My Zsh --- echo -e "${YELLOW}[3/6] 检查 Oh My Zsh...${NC}" if [ ! -d "$HOME/.oh-my-zsh" ]; then URL="https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh" [ "$IS_CN" = true ] && URL="https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh" sh -c "$(curl -fsSL $URL)""" --unattended fi
_ai_interactive_smart() { if ! command -v fzf &> /dev/null; thenreturn; fi if [[ "$BUFFER" =~ ^[??] ]]; then local query=$(echo"$BUFFER" | sed 's/^[??]*//; s/ at [0-9].*//' | xargs) if [[ -z "$query" ]]; thenreturn; fi echo -n "\n🧠 Thinking..." local python_script=" import sys, json, urllib.request, socket, os socket.setdefaulttimeout(15) try: key = os.environ.get('AI_API_KEY', '') if not key or 'PLACEHOLDER' in key: print('ERR_NO_KEY') sys.exit() data = { 'model': '$AI_MODEL', 'messages': [ {'role': 'system', 'content': 'You are a Zsh CLI expert. Return ONLY commands (one per line) or @@TEXT@@ for explanations. Current OS: ' + os.uname().sysname}, {'role': 'user', 'content': '$query'} ], 'temperature': 0.1 } req = urllib.request.Request('$AI_API_URL', json.dumps(data).encode('utf-8')) req.add_header('Content-Type', 'application/json') req.add_header('Authorization', 'Bearer ' + key) with urllib.request.urlopen(req) as response: js = json.loads(response.read().decode('utf-8')) print(js['choices'][0]['message']['content'].strip().replace('\`\`\`bash','').replace('\`\`\`','')) except Exception as e: print('SYS_ERR:' + str(e)) " local result=$(python3 -c "$python_script") if [[ "$result" == "ERR_NO_KEY" ]]; then echo -n "\n❌ 请设置 AI_API_KEY" zle redisplay; return elif [[ "$result" == *"@@TEXT@@"* ]]; then echo -e "\n\033[36m${result//@@TEXT@@/}\033[0m" BUFFER=""; zle redisplay; return elif [[ "$result" == "SYS_ERR"* ]]; then echo -n "\n💥 $result"; zle redisplay; return fi zle -I local selected=$(echo"$result" | fzf --height=30% --layout=reverse --prompt="Run: " --border) if [[ -n "$selected" ]]; then BUFFER="$selected"; CURSOR=$#BUFFER; else BUFFER=""; zle redisplay; fi else zle .accept-line fi } zle -N _ai_interactive_smart bindkey"^M" _ai_interactive_smart EOF
# 替换 Key if [[ "$OSTYPE" == "darwin"* ]]; then sed -i ''"s/PLACEHOLDER_API_KEY/$AI_KEY_INPUT/""$HOME/.zshrc" else sed -i "s/PLACEHOLDER_API_KEY/$AI_KEY_INPUT/""$HOME/.zshrc" fi