#!/usr/bin/env bash # Sundy Handbook · RTK installer for macOS / Linux. # # Recommended: # bash <(curl -fsSL https://sundy.tumpai.site/install-rtk.sh) # # Options: # --no-init Install RTK only; skip Claude Code / Codex integration # --claude-only Configure Claude Code only # --codex-only Configure Codex only # -y, --yes Skip confirmation set -e ASSUME_YES="${RTK_SUNDY_YES:-0}" RUN_INIT="${RTK_INIT:-1}" INIT_CLAUDE=1 INIT_CODEX=1 for arg in "$@"; do case "$arg" in --no-init) RUN_INIT=0 ;; --claude-only) INIT_CLAUDE=1; INIT_CODEX=0 ;; --codex-only) INIT_CLAUDE=0; INIT_CODEX=1 ;; -y|--yes) ASSUME_YES=1 ;; -h|--help) cat <&2; exit 1 ;; esac done if [ -t 1 ]; then C_RED=$'\033[31m'; C_GRN=$'\033[32m'; C_YLW=$'\033[33m' C_BLU=$'\033[34m'; C_BLD=$'\033[1m'; C_RST=$'\033[0m' else C_RED=""; C_GRN=""; C_YLW=""; C_BLU=""; C_BLD=""; C_RST="" fi ok() { echo "${C_GRN}OK${C_RST} $*"; } info() { echo "${C_BLU}INFO${C_RST} $*"; } warn() { echo "${C_YLW}WARN${C_RST} $*"; } fail() { echo "${C_RED}ERROR${C_RST} $*" >&2; exit 1; } title() { echo; echo "${C_BLD}${C_BLU}==> $*${C_RST}"; } NON_INTERACTIVE=0 if [ ! -t 0 ]; then if ( : /dev/null; then exec /dev/null 2>&1 && rtk gain >/dev/null 2>&1 } title "1/4 安装 RTK" if rtk_is_valid; then ok "RTK 已安装:$(rtk --version 2>/dev/null || echo unknown)" else if command -v rtk >/dev/null 2>&1; then warn "检测到 rtk 命令,但 rtk gain 失败;这可能是同名的 Rust Type Kit。将安装 Rust Token Killer 并让它优先进入 PATH。" fi if command -v brew >/dev/null 2>&1; then info "使用 Homebrew 安装:brew install rtk-ai/tap/rtk" brew install rtk-ai/tap/rtk || fail "Homebrew 安装 RTK 失败,请确认网络可以访问 GitHub" else info "使用官方 quick install 安装" curl -fsSL https://raw.githubusercontent.com/rtk-ai/rtk/master/install.sh | sh || fail "官方安装脚本执行失败,请确认网络可以访问 GitHub" fi fi if ! rtk_is_valid; then fail "安装后仍无法通过 rtk gain 验证。请检查 PATH 或卸载错误的同名 rtk。" fi ok "RTK 可用:$(rtk --version)" title "2/4 初始化 AI 工具" if [ "$RUN_INIT" = "1" ]; then if [ "$INIT_CLAUDE" = "1" ]; then if rtk init -g --auto-patch; then ok "已初始化 Claude Code 全局 hook" else warn "Claude Code 初始化失败,可稍后手动运行:rtk init -g --auto-patch" fi fi if [ "$INIT_CODEX" = "1" ]; then if rtk init -g --codex; then ok "已初始化 Codex 全局指令" else warn "Codex 初始化失败,可稍后手动运行:rtk init -g --codex" fi fi else info "已跳过初始化" fi title "3/4 验证" rtk verify || warn "rtk verify 未完全通过;RTK 命令本身仍可使用" title "4/4 节省统计" rtk gain || true echo cat <