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 (Anthropic / OpenAI / Gemini / Ollama).

Установка

Tech Update Recommender требует Python 3.11+.

# Из PyPI:
pip install tech-update-recommender[llm]
# или через pipx:
pipx install "tech-update-recommender[llm]"

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

Группа [llm] ставит litellm. Без неё Tech Update Recommender работает в режимах report (без LLM) и просто возвращает понятную ошибку, если запросить advice/full.

Установка Syft

Tech Update Recommender не пытается тянуть 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-update-recommender scan ./my-project

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

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

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

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

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

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

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

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

Пример полной структуры см. в docs/tech-update-recommender.yaml.example. Минимальный вариант:

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-ключ.
ANTHROPIC_API_KEY Используется, если TUR_LLM_API_KEY не задан.
OPENAI_API_KEY То же самое.
GEMINI_API_KEY То же самое.
TUR_SYFT_PATH Путь к бинарнику syft (как --syft-path).

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

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

Экосистемы, для которых Tech Update Recommender умеет проверять версии и advisories через deps.dev:

  • npm
  • pypi
  • maven
  • golang
  • cargo
  • gem (RubyGems)
  • nuget

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

Известные ограничения

  • Syft требует lock-файлы. Если в проекте только requirements.txt без зафиксированных версий или без lock-файла — Syft найдёт меньше зависимостей, чем хотелось бы.
  • deps.dev не знает системные пакеты. Контейнерные пакеты (deb / apk / rpm) выводятся отдельной секцией без проверки на устаревание/CVE.
  • deps.dev v3alpha может меняться. Batch endpoint используется для получения advisories текущих версий; в случае поломки API — Tech Update Recommender выдаст понятную ошибку и не упадёт с traceback.
  • LLM не гарантирует корректность рекомендаций. Это всегда advisory: проверяйте совместимость и тестируйте обновления.
  • Нормализация имён пакетов. PyPI нормализует имена (Flask-Babelflask-babel). Tech Update Recommender делает это на своей стороне для запросов и кеша.

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

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

Тесты и линтер

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_update_recommender-0.1.0.tar.gz (75.1 kB view details)

Uploaded Source

Built Distribution

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

tech_update_recommender-0.1.0-py3-none-any.whl (40.1 kB view details)

Uploaded Python 3

File details

Details for the file tech_update_recommender-0.1.0.tar.gz.

File metadata

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

File hashes

Hashes for tech_update_recommender-0.1.0.tar.gz
Algorithm Hash digest
SHA256 01b7817aa1d240b391e5b9e84c2e86536a67589904dfc5726c74769c84ee407b
MD5 bc5e0e0fbd5d08be4642b65f09af20a9
BLAKE2b-256 679b6fbaa3deb677a53c3e5531e4b132fb8b4a6c425e868004954199b6e0f09e

See more details on using hashes here.

File details

Details for the file tech_update_recommender-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for tech_update_recommender-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c48d1ab5ec91a70ff8ac4d651586bcb03a0dde3005e2b85eb76a425f3efd4d83
MD5 e9f4f932c2d27fc754b64270f9bc6b6a
BLAKE2b-256 01f315f8649dfee414e97aff82583483574ee79f284068e84a6072352add7d01

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