Engineers use different LLM providers (Anthropic/OpenAI/OpenRouter/...); the package does not pin a provider or model. install.sh now accepts any known provider key and README states provider-agnosticism explicitly.
104 lines
4.7 KiB
Bash
Executable File
104 lines
4.7 KiB
Bash
Executable File
#!/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 <<EOF
|
||
|
||
────────────────────────────────────────────────────────
|
||
Готово! Памятка:
|
||
|
||
Запуск: pi
|
||
Обновление: pi update --extensions
|
||
Команды: /bugfix <тикет> /feature <тикет>
|
||
/review [фокус] /rfc <тема> /kit-config
|
||
Проверка: /kit-config — покажет действующие корпоративные значения
|
||
|
||
Внутренний курс по Pi: ${INTERNAL_COURSE_URL}
|
||
────────────────────────────────────────────────────────
|
||
EOF
|