#!/usr/bin/env bash # # pi-kit bootstrap — one-shot setup for new engineers. Idempotent: safe to re-run. # # Usage: # curl -fsSL https://git.codelab.vc/ai/pi-kit/-/raw/main/install.sh | bash # # or, from a checkout: # ./install.sh # set -euo pipefail # --------------------------------------------------------------------------- # The ONLY place the repository address appears. No version ref on purpose, so # `pi update --extensions` always pulls the latest main. # --------------------------------------------------------------------------- PI_KIT_REPO="git:git.codelab.vc/ai/pi-kit" MIN_NODE_MAJOR=20 INTERNAL_COURSE_URL="TODO: ссылка на внутренний курс по Pi" info() { printf '\033[1;34m==>\033[0m %s\n' "$*"; } warn() { printf '\033[1;33m[!]\033[0m %s\n' "$*"; } err() { printf '\033[1;31m[x]\033[0m %s\n' "$*" >&2; } # --- 1. Node.js ------------------------------------------------------------- if ! command -v node >/dev/null 2>&1; then err "Node.js не найден. Установи Node.js >= ${MIN_NODE_MAJOR} (https://nodejs.org) и запусти скрипт снова." exit 1 fi NODE_MAJOR="$(node -p 'process.versions.node.split(".")[0]')" if [ "$NODE_MAJOR" -lt "$MIN_NODE_MAJOR" ]; then err "Нужен Node.js >= ${MIN_NODE_MAJOR}, а установлен $(node -v). Обнови Node.js и запусти скрипт снова." exit 1 fi info "Node.js $(node -v) — ок." # --- 2. Pi ------------------------------------------------------------------ if command -v pi >/dev/null 2>&1; then info "Pi уже установлен ($(pi --version 2>/dev/null || echo 'версия неизвестна'))." else info "Ставлю Pi..." curl -fsSL https://pi.dev/install.sh | sh # Make pi available in the current shell if the installer added a new PATH dir. if ! command -v pi >/dev/null 2>&1; then export PATH="$HOME/.local/bin:$PATH" fi if ! command -v pi >/dev/null 2>&1; then err "Pi установлен, но не найден в PATH. Открой новый терминал (или поправь PATH) и запусти скрипт снова." exit 1 fi fi # --- 3. Install the corporate package -------------------------------------- info "Устанавливаю корпоративный пакет: ${PI_KIT_REPO}" pi install "$PI_KIT_REPO" info "Пакет установлен. Обновляться потом: pi update --extensions" # --- 4. Provider API keys --------------------------------------------------- # Pi is provider-agnostic: engineers use different LLM providers (Anthropic, # OpenAI, OpenRouter, Google, ...). The package does NOT pin a provider/model. # We only check that *some* provider key is present and hint if none is. PROVIDER_KEYS=(ANTHROPIC_API_KEY OPENAI_API_KEY OPENROUTER_API_KEY GEMINI_API_KEY GOOGLE_API_KEY GROQ_API_KEY) found_key="" for k in "${PROVIDER_KEYS[@]}"; do if [ -n "${!k:-}" ]; then found_key="$k" break fi done if [ -n "$found_key" ]; then info "Найден ключ LLM-провайдера: ${found_key} — ок." else warn "Не найден ни один ключ LLM-провайдера." cat <<'EOF' Pi работает с разными провайдерами — выбери свой и задай ключ, например: export ANTHROPIC_API_KEY="..." # Anthropic export OPENAI_API_KEY="..." # OpenAI export OPENROUTER_API_KEY="..." # OpenRouter Провайдер и модель выбираются флагами --provider/--model или в настройках Pi (см. `pi --list-models`) — пакет их не навязывает. Для скилла работы с трекером также понадобятся: export TRACKER_URL="..." # адрес Jira (или возьмётся из корп. контекста) export JIRA_TOKEN="..." # Jira personal access token (Server/DC) EOF fi # --- 5. Cheat sheet --------------------------------------------------------- cat < /feature <тикет> /review [фокус] /rfc <тема> /kit-config Проверка: /kit-config — покажет действующие корпоративные значения Внутренний курс по Pi: ${INTERNAL_COURSE_URL} ──────────────────────────────────────────────────────── EOF