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.3.0.tar.gz (51.7 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.3.0-py3-none-any.whl (28.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: tech_upd_recommender-0.3.0.tar.gz
  • Upload date:
  • Size: 51.7 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.3.0.tar.gz
Algorithm Hash digest
SHA256 7675e4002c6b7d16911b26dd46dbb0a2d1bb3b3fd08bf426890013ba789e51c7
MD5 1ca12f8e220667bb86d8a0fafbdae0af
BLAKE2b-256 b4e106d327cbffd2579700b8134e7721480d196bb2e78ac3fe707063a6ad1042

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tech_upd_recommender-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1eb3ce5d2447fd41410acb354c5f2285236b0f8e7a0b23bf093868fc2ef7c5b4
MD5 7b534c8bf3ababb08fb07e36fc40c754
BLAKE2b-256 e3adba8004fcde22ab0d9a7ab03637632ede81491b9ad951254a121ed2dd9f6c

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