Добавлен шаг между выбором модели и сбором ключей: для провайдеров
требующих внешний CLI/daemon — проверка наличия, инструкция по
установке, опциональный авто-install (TTY only).
install/lib-preflight.sh — диспетчер:
preflight_run <provider-id>
- ищет install/preflight/<id>.sh, source'ит, вызывает
preflight_check_<sanitized_id>
- функция возвращает 0/1, печатает инструкцию в stderr
- non-TTY: только печать, без вопросов
preflight_offer_install <cli> <install-cmd>:
- TTY: спрашивает [y/N/skip], выполняет install-cmd
- non-TTY: печатает и пропускает
install/preflight/ — 6 файлов (только для провайдеров с CLI):
anthropic-bedrock.sh — aws CLI + sts get-caller-identity
google-vertex.sh — gcloud CLI + project config
codex.sh — codex CLI (npm) + login status
ollama-local.sh — ollama binary + 127.0.0.1:11434 daemon
mlx-local.sh — mlx_lm.server (arm64 only) + 127.0.0.1:8080
lmstudio-local.sh — порт 127.0.0.1:1234 (desktop app)
Direct-api провайдеры (anthropic, openai, xai, deepseek, google) +
proxy (litellm, openrouter) + openai-azure — preflight-файла нет,
диспетчер тихо пропускает, ключ собирается обычно.
Тесты: bash -n чисто на всех 8 файлах, unit dispatcher показывает
silent-pass для anthropic, warn+exit-1 для bedrock без aws на PATH.
29 lines
1 KiB
Bash
29 lines
1 KiB
Bash
# shellcheck shell=bash
|
|
# preflight/codex.sh — OpenAI Codex CLI через ChatGPT OAuth.
|
|
|
|
preflight_check_codex() {
|
|
if ! command -v codex >/dev/null 2>&1; then
|
|
if ! command -v npm >/dev/null 2>&1; then
|
|
echo "" >&2
|
|
echo " ⚠ npm требуется для установки codex." >&2
|
|
echo " Сначала: brew install node (macOS) или apt install nodejs npm (Linux)" >&2
|
|
echo "" >&2
|
|
return 1
|
|
fi
|
|
preflight_offer_install "codex CLI" "npm install -g @openai/codex" || return 1
|
|
fi
|
|
# Проверяем что OAuth активен.
|
|
local status
|
|
status="$(codex login status 2>&1 || true)"
|
|
if ! echo "$status" | grep -qiE "logged.in|active"; then
|
|
echo "" >&2
|
|
echo " ⚠ codex не залогинен в ChatGPT." >&2
|
|
echo " Запустите: codex login" >&2
|
|
echo " (требуется ChatGPT Plus/Pro/Team подписка)" >&2
|
|
echo "" >&2
|
|
return 1
|
|
fi
|
|
echo " ✓ codex CLI: $(codex --version 2>&1 | head -1)" >&2
|
|
echo " ✓ OAuth: $status" >&2
|
|
return 0
|
|
}
|