Skip to main content

Open-source CLI utility for local dependency analysis with AI-powered update recommendations.

Project description

Tech Update Recommender

Tech Update Recommender — open-source CLI-утилита для локального анализа зависимостей проекта. Она находит application-level зависимости через Syft, проверяет их версии и известные уязвимости через deps.dev, и опционально генерирует AI-рекомендации по обновлению через LiteLLM.

Ключевые возможности:

  • Локально, без отправки исходного кода на сервер.
  • Поддержка ecosystem'ов npm, PyPI, Maven, Go, Cargo, RubyGems, NuGet.
  • Кеш ответов deps.dev (SQLite, TTL 1 час) — повторные запуски быстрые.
  • Несколько форматов вывода: table (rich), json, markdown.
  • Выбор LLM-провайдера через LiteLLM (OpenAI / Anthropic / Gemini / Yandex Cloud / Ollama и любые OpenAI-совместимые API).

Установка

Требует Python 3.11+.

# Из PyPI:
pip install tech-upd-recommender

# или через pipx:
pipx install tech-upd-recommender

# Из исходников (для разработки):
pip install -e ".[dev]"

Все зависимости (включая LiteLLM для AI-рекомендаций) ставятся автоматически.

Установка Syft

Syft нужно ставить отдельно — это системный инструмент для сканирования зависимостей.

# macOS:
brew install syft

# Linux / любой UNIX (официальный установщик):
curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin

Если syft установлен в нестандартное место — передайте путь через --syft-path или поле syft.path в ~/.tech-update-recommender.yaml.

Quickstart

# 1. Простой отчёт по фактам (без LLM):
tech-upd-recommender scan ./my-project

# 2. Полный отчёт с AI-рекомендациями (Gemini):
tech-upd-recommender scan ./my-project --mode full \
    --llm-model gemini/gemini-2.0-flash

# 3. С OpenAI-совместимым провайдером (Yandex Cloud, DeepSeek и т.п.):
#    Создайте .env в корне проекта:
#      OPENAI_API_BASE=https://ai.api.cloud.yandex.net/v1
#      OPENAI_API_KEY=ваш_ключ
tech-upd-recommender scan ./my-project --mode full \
    --llm-model "openai/gpt://folder_id/model_name"

# 4. JSON в файл:
tech-upd-recommender scan ./my-project --output json --save out.json

# 5. Указать лимит контекста для больших проектов:
tech-upd-recommender scan ./my-project --mode full \
    --llm-model gemini/gemini-2.0-flash --max-context-tokens 32000

Режимы работы

Режим Что делает
report (default) только факты: версии, дельты semver, advisories.
advice только AI-рекомендации (без таблицы фактов в LLM-секции — но summary остаётся).
full факты + AI-рекомендации.

Режимы advice и full требуют указать LLM-модель (через CLI-аргумент, env var или конфиг). Без модели будет ошибка конфигурации (exit code 5) с подсказкой что делать.

Флаг --no-llm принудительно понижает режим до report — удобно, если конфиг по умолчанию содержит модель, но прямо сейчас не хочется дёргать API.

В режимах advice и full отчёт выводится в консоль и автоматически сохраняется в файл tech-upd-report.md в текущей директории. Можно указать другой путь через --save my-report.md.

--max-context-tokens

Управляет размером промпта, отправляемого в LLM (по умолчанию 8000). Для больших проектов увеличьте до контекстного окна модели:

Модель Макс. контекст
gemini/gemini-2.0-flash 1 048 576
openai/gpt-4o 128 000
claude-sonnet-4-20250514 200 000
openai/deepseek-chat 64 000

На практике 32 000–64 000 хватает для большинства проектов.

Конфигурационный файл

Путь по умолчанию: ~/.tech-update-recommender.yaml. Файл опционален — при отсутствии используются значения по умолчанию.

llm:
  model: "gemini/gemini-2.0-flash"
  max_context_tokens: 8000

cache:
  enabled: true
  ttl_seconds: 3600
  path: "~/.cache/tech-update-recommender/"

API-ключи лучше держать в env vars, а не в файле. Если всё-таки храните в файле — chmod 600 ~/.tech-update-recommender.yaml.

Переменные окружения

Переменная Что задаёт
TUR_LLM_MODEL Имя LLM-модели (как --llm-model).
TUR_LLM_API_KEY Универсальный API-ключ.
OPENAI_API_KEY API-ключ для OpenAI-совместимых провайдеров.
OPENAI_API_BASE URL эндпоинта для OpenAI-совместимых провайдеров (Yandex Cloud, DeepSeek и др.).
ANTHROPIC_API_KEY API-ключ Anthropic.
GEMINI_API_KEY API-ключ Google Gemini.
TUR_SYFT_PATH Путь к бинарнику syft (как --syft-path).

Каскад приоритетов значений (от высшего к низшему): CLI > env vars > ~/.tech-update-recommender.yaml > дефолты.

Поддерживаемые экосистемы

Экосистема Примеры файлов зависимостей
npm package.json, package-lock.json
pypi requirements.txt, pyproject.toml, Pipfile
maven pom.xml
golang go.mod, go.sum
cargo Cargo.toml, Cargo.lock
gem (RubyGems) Gemfile, Gemfile.lock
nuget *.csproj, packages.config

Системные пакеты (deb, apk, rpm и т.п.), найденные Syft, не проверяются — они показываются отдельной секцией «Не проверено через deps.dev» (это ограничение API deps.dev).

Коды возврата

Код Значение
0 Успех.
1 Любая прочая ошибка (с подсказкой использовать --verbose).
2 Ошибка Syft (SyftError).
3 Ошибка deps.dev (DepsDevError).
4 Ошибка LLM (LLMError и его подклассы).
5 Ошибка конфигурации (ConfigError).
130 Отменено пользователем (Ctrl+C).

Разработка

# Установить с dev-зависимостями:
pip install -e ".[dev]"

# Тесты:
pytest -q

# Линтер:
ruff check .
ruff format --check .

Лицензия

MIT — см. файл LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tech_upd_recommender-0.4.0.tar.gz (276.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tech_upd_recommender-0.4.0-py3-none-any.whl (40.4 kB view details)

Uploaded Python 3

File details

Details for the file tech_upd_recommender-0.4.0.tar.gz.

File metadata

  • Download URL: tech_upd_recommender-0.4.0.tar.gz
  • Upload date:
  • Size: 276.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for tech_upd_recommender-0.4.0.tar.gz
Algorithm Hash digest
SHA256 46f0f387053c6a8631c628f13ddf23a714ee51ac3468ba66b600fa8b09ed869a
MD5 3c60e957dfa136ee4ecb1af3082a3bbb
BLAKE2b-256 a679ceee33076df78e379ca16d7da98adee62dece735fe62b6f44c7c1bd03f3e

See more details on using hashes here.

File details

Details for the file tech_upd_recommender-0.4.0-py3-none-any.whl.

File metadata

File hashes

Hashes for tech_upd_recommender-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3ad1e531981e24b72333408564b88eccd186138b24d39ac38943a75da38d7843
MD5 6e48467ab2b020b0703f82c68b0e7466
BLAKE2b-256 ef32872bf6c1d20d4ccbd03d1b2fd8e6b48b65ec18243a2d2a59b8706c25dbf2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page