diff --git a/extensions/kit-cli.ts b/extensions/kit-cli.ts index 5e1f8ab..dc91f6e 100644 --- a/extensions/kit-cli.ts +++ b/extensions/kit-cli.ts @@ -84,7 +84,7 @@ export default function kitCliExtension(pi: ExtensionAPI) { } // Env vars (presence only, never values) - for (const v of ["TRACKER_URL", "JIRA_TOKEN", "GITLAB_TOKEN"]) { + for (const v of ["TRACKER_URL", "JIRA_TOKEN", "CONFLUENCE_TOKEN", "GITLAB_TOKEN"]) { lines.push((process.env[v] ? ok : warn)(`${v} ${process.env[v] ? "задан" : "не задан"}`)); } const provider = PROVIDER_KEYS.find((k) => process.env[k]); diff --git a/install.sh b/install.sh index ab8cf45..62cd49c 100755 --- a/install.sh +++ b/install.sh @@ -83,7 +83,7 @@ info "Пакет установлен. Обновляться потом: pi upd # Precedence: PI_KIT_PROFILE env > interactive prompt > "all" (no gating). PROFILE="${PI_KIT_PROFILE:-}" case "$PROFILE" in - frontend | backend | qa | mobile) ;; # valid, keep + frontend | backend | qa | mobile | pm) ;; # valid, keep "") # ask if we have a terminal, even under `curl | bash` (read from /dev/tty) if [ -r /dev/tty ]; then { @@ -92,7 +92,8 @@ case "$PROFILE" in printf ' 2) backend — Go/Rust/Python\n' printf ' 3) qa — тестирование\n' printf ' 4) mobile — Android/iOS\n' - printf 'Номер или имя [1-4]: ' + printf ' 5) pm — постановка задач продакт-менеджера\n' + printf 'Номер или имя [1-5]: ' } >/dev/tty read -r ans — get a default URL from config/company.json (or ""). +read_pkg_url() { + [ -z "$PACKAGE_JSON" ] && { echo ""; return; } + node -e 'const f=process.argv[1];try{const c=require(f);const v=c[process.argv[2]]||"";process.stdout.write(typeof v==="string"&&v&&v!=="TODO"?v:"")}catch(e){process.stdout.write("")}' "$PACKAGE_JSON" "$1" 2>/dev/null +} + # Which provider key (if any) is already present in the environment. PROVIDER_KEYS=(ANTHROPIC_API_KEY OPENAI_API_KEY OPENROUTER_API_KEY GEMINI_API_KEY GOOGLE_API_KEY GROQ_API_KEY) found_key="" @@ -234,21 +256,46 @@ env_setup_interactive() { # shellcheck disable=SC1090 [ -f "$ENV_FILE" ] && . "$ENV_FILE" || true - local tracker="${TRACKER_URL:-}" jira="${JIRA_TOKEN:-}" gitlab="${GITLAB_TOKEN:-}" ans="" + # Package defaults from config/company.json (offer, user may override). + local pkg_tracker pkg_docs pkg_host + pkg_tracker="$(read_pkg_url trackerUrl)" + pkg_docs="$(read_pkg_url docsUrl)" + pkg_host="$(read_pkg_url gitHost)" - # TRACKER_URL (not a secret): visible prompt, current value as default. - printf 'TRACKER_URL (адрес Jira)%s: ' "${tracker:+ [${tracker}]}" >/dev/tty + local ans="" + # Seed res from current env (keep on re-run) else package default. + local tracker="${TRACKER_URL:-${pkg_tracker}}" + local confluence="${CONFLUENCE_URL:-${pkg_docs}}" + local jira="${JIRA_TOKEN:-}" + local conf="${CONFLUENCE_TOKEN:-}" + local gitlab="${GITLAB_TOKEN:-}" + + # ---- URLs (visible prompts; current/default value shown) ---- + printf '\nURL-адреса корпоративных сервисов (Enter — оставить дефолт):\n' + printf ' TRACKER_URL (Jira)%s: ' "${tracker:+ [${tracker}]}" >/dev/tty read -r ans /dev/tty + printf ' CONFLUENCE_URL (Confluence/wiki)%s: ' "${confluence:+ [${confluence}]}" >/dev/tty + read -r ans /dev/tty read -rs ans /dev/tty [ -n "$ans" ] && jira="$ans" - # GITLAB_TOKEN (secret, для create-mr.sh): hidden input. - printf 'GITLAB_TOKEN (скрытый ввод, Enter — пропустить): ' >/dev/tty + printf 'CONFLUENCE_TOKEN: где брать — Confluence: Профиль → Настройки → Personal access tokens (старые: API tokens).\n' + printf 'CONFLUENCE_TOKEN (скрытый ввод): ' >/dev/tty + read -rs ans /dev/tty + [ -n "$ans" ] && conf="$ans" + + printf 'GITLAB_TOKEN: где брать — GitLab: Настройки → Access Tokens → Personal; scope: api (или read_api).\n' + printf 'GITLAB_TOKEN (скрытый ввод): ' >/dev/tty read -rs ans /dev/tty [ -n "$ans" ] && gitlab="$ans" @@ -278,7 +325,9 @@ env_setup_interactive() { { echo "# Managed by pi-kit install.sh — не коммить. chmod 600, plaintext." [ -n "$tracker" ] && echo "export TRACKER_URL='$(esc_sq "$tracker")'" + [ -n "$confluence" ] && echo "export CONFLUENCE_URL='$(esc_sq "$confluence")'" [ -n "$jira" ] && echo "export JIRA_TOKEN='$(esc_sq "$jira")'" + [ -n "$conf" ] && echo "export CONFLUENCE_TOKEN='$(esc_sq "$conf")'" [ -n "$gitlab" ] && echo "export GITLAB_TOKEN='$(esc_sq "$gitlab")'" [ -n "$prov_name" ] && [ -n "$prov_val" ] && echo "export ${prov_name}='$(esc_sq "$prov_val")'" } >"$ENV_FILE" @@ -315,10 +364,13 @@ else cat <<'EOF' Задай нужные переменные вручную (например, в ~/.config/pi-kit/env.sh): export ANTHROPIC_API_KEY="..." # или OPENAI_API_KEY / OPENROUTER_API_KEY - export TRACKER_URL="..." # адрес Jira (Server/DC) - export JIRA_TOKEN="..." # Jira personal access token - export GITLAB_TOKEN="..." # для создания MR (scripts/create-mr.sh) + export TRACKER_URL="..." # адрес Jira (сейчас подхватится трекер из config/company.json) + export CONFLUENCE_URL="..." # адрес Confluence (подхватится из config/company.json) + export JIRA_TOKEN="..." # Jira personal access token + export CONFLUENCE_TOKEN="..." # Confluence personal access token + export GITLAB_TOKEN="..." # GitLab token (scope api) для MR/пайплайнов/поиска Провайдер/модель — флагами --provider/--model или в настройках Pi (пакет не навязывает). + URL можно не задавать: инструменты берут дефолты из config/company.json. EOF fi @@ -330,11 +382,14 @@ cat < /feature <тикет> /review [фокус] /rfc <тема> /kit-config /kit-doctor /kit-help + Инструменты: jira_issue_* | gitlab_mr_create/gitlab_pipeline_status/gitlab_code_search + | confluence_search/confluence_page_* (нативные, для агента) Проверка: /kit-doctor — health-check окружения ──────────────────────────────────────────────────────── EOF