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_upd_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_upd_recommender-0.1.0-py3-none-any.whl (40.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: tech_upd_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_upd_recommender-0.1.0.tar.gz
Algorithm Hash digest
SHA256 b8dd99e15f92880b36cd655e4e86b469b939d169ff829967a1643af23618210d
MD5 6ff17a2dd3f15c9fa587f6b84c810b52
BLAKE2b-256 dd58198b5b80cc6081cf4ff49cefda67f7ff3ce521076c88828d6a4e02d0531f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tech_upd_recommender-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5592a594f7e9284dce5a41ff00876fc8e571bc1ecfc077441847f288a37c8794
MD5 7ac64a4f4f90976f33ef83e61536bf54
BLAKE2b-256 2660c5ef72426ef85c65cfc445b83cc64f8d870390cb826311f24823bd12bf49

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