AI-powered dependency update advisor built with LangGraph
Project description
DepAdvisor
AI-powered dependency update advisor — Know what to update, why, and in what order.
DepAdvisor analyzes your project's dependencies, checks for available updates, fetches vulnerability data and changelogs, then uses an LLM to produce risk-scored, prioritized update recommendations.
Unlike Dependabot or Renovate which tell you that updates exist, DepAdvisor tells you why you should or shouldn't update, what will break, and in what order to proceed.
Features
- Multi-ecosystem: Python (pip/poetry), Node.js (npm), Java (Maven)
- Risk scoring: Each update gets a 1-10 risk score with plain English explanation
- Vulnerability aware: Integrates with OSV.dev for known CVE detection
- Changelog analysis: Fetches GitHub release notes to identify breaking changes
- Local-first: Runs entirely locally with Ollama — no API keys needed
- Cloud LLM support: Optional OpenAI integration for faster analysis
- Multiple outputs: Terminal (Rich), Markdown, JSON, GitHub comment format
- CI/CD ready:
--fail-on criticalexits with code 1 for pipeline gating - HTTP API: FastAPI server mode for team dashboards and integrations
Quick Start
Install
pip install depadvisor
Or with UV:
uv tool install depadvisor
Install Ollama (for local LLM)
# macOS
brew install ollama
# Linux
curl -fsSL https://ollama.com/install.sh | sh
# Download the model
ollama pull qwen3:8b
Run
# Analyze current directory
depadvisor analyze .
# Analyze a specific project with options
depadvisor analyze ./my-project --ecosystem python --format markdown
# Analyze a remote git repository (cloned automatically, cleaned up after)
depadvisor analyze https://github.com/pallets/flask.git -v
# Quick vulnerability scan (no LLM needed) — works with local paths and git URLs
depadvisor scan .
depadvisor scan https://github.com/expressjs/express.git
# Use OpenAI instead of local Ollama
depadvisor analyze . --llm openai/gpt-4o-mini
CLI Reference
depadvisor analyze
Run a full dependency analysis with LLM-powered risk assessment. Accepts local paths or git URLs (HTTPS/SSH).
Usage: depadvisor analyze [PATH] [OPTIONS]
Arguments:
PATH Local path or git URL of the project [default: .]
Options:
-e, --ecosystem TEXT Force ecosystem: python, node, java (auto-detected)
-l, --llm TEXT LLM provider/model (default: ollama/qwen3:8b)
-f, --format TEXT Output: terminal, markdown, json, github-comment
-o, --output TEXT Write to file instead of stdout
--fail-on TEXT Exit code 1 if risk level found: critical, high, medium
--include-dev Include dev dependencies
-v, --verbose Show detailed progress
depadvisor scan
Quick vulnerability-only scan. No LLM required. Accepts local paths or git URLs.
Usage: depadvisor scan [PATH] [OPTIONS]
Arguments:
PATH Local path or git URL of the project [default: .]
Options:
-e, --ecosystem TEXT Force ecosystem: python, node, java
depadvisor serve
Start the HTTP API server.
Usage: depadvisor serve [OPTIONS]
Options:
-h, --host TEXT Host to bind to [default: 0.0.0.0]
-p, --port INT Port [default: 8888]
Supported Ecosystems
| Ecosystem | Dependency Files | Registry |
|---|---|---|
| Python | requirements.txt, pyproject.toml (PEP 621 + Poetry) |
PyPI |
| Node.js | package.json |
npm |
| Java | pom.xml |
Maven Central |
Architecture
The agent pipeline flows through six nodes with conditional routing:
- parse_deps — Reads dependency files from the project
- check_updates — Queries package registries (PyPI, npm, Maven Central)
- fetch_vulns — Checks OSV.dev for known vulnerabilities
- fetch_changelogs — Fetches release notes from GitHub
- analyze_risk — LLM scores each update for risk (with retry on failure)
- generate_report — LLM generates a prioritized summary
If no updates are found, the pipeline skips directly to report generation.
Built with LangGraph for agent orchestration.
Configuration
Environment Variables
| Variable | Description | Default |
|---|---|---|
DEPADVISOR_LLM_PROVIDER |
LLM provider | ollama |
DEPADVISOR_LLM_MODEL |
LLM model name | qwen3:8b |
OLLAMA_BASE_URL |
Ollama server URL (for remote Ollama) | http://localhost:11434 |
OPENAI_API_KEY |
OpenAI API key (if using OpenAI) | - |
GITHUB_TOKEN |
GitHub token for higher API rate limits | - |
DEPADVISOR_CACHE_DIR |
Cache directory | ~/.cache/depadvisor |
LANGSMITH_TRACING |
Enable LangSmith tracing (optional) | - |
LANGSMITH_API_KEY |
LangSmith API key (optional) | - |
LANGSMITH_PROJECT |
LangSmith project name (optional) | - |
LANGSMITH_ENDPOINT |
LangSmith API endpoint (optional) | https://api.smith.langchain.com |
LangSmith tracing: If
LANGSMITH_TRACING=trueandLANGSMITH_API_KEYare set, all LangGraph agent runs are automatically traced in LangSmith. Each run is tagged with the ecosystem, LLM provider, and project name for easy filtering. No code changes needed — just set the environment variables.
CI/CD Integration
# .github/workflows/dependency-review.yml
name: Dependency Review
on:
schedule:
- cron: '0 9 * * 1' # Weekly on Monday 9am
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: pip install depadvisor
- run: |
depadvisor analyze . \
--llm openai/gpt-4o-mini \
--format github-comment \
--output report.md \
--fail-on critical
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
HTTP API
# Start server
depadvisor serve --port 8888
# Analyze a project
curl -X POST http://localhost:8888/api/v1/analyze \
-H "Content-Type: application/json" \
-d '{"project_path": "/path/to/project", "ecosystem": "python"}'
# Health check
curl http://localhost:8888/health
Development
git clone https://github.com/chaubes/depadvisor.git
cd depadvisor
uv sync --all-extras
# Run tests
make test-unit
make test-integration
# Lint
make lint
# Run the CLI
make run ARGS="analyze tests/fixtures/python"
See CONTRIBUTING.md for the full development guide.
License
MIT License. See 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file depadvisor-0.2.0.tar.gz.
File metadata
- Download URL: depadvisor-0.2.0.tar.gz
- Upload date:
- Size: 185.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a9b479173d0753f2c914ec8b102b90395e03a1b1105503f8192ed081fe6a09bd
|
|
| MD5 |
a3e5eef6aad2827c7b6106b45464491f
|
|
| BLAKE2b-256 |
01ffe0b34aad56052a1efefb8c9e2b9c51eaa128259e7493f56da9149d5447c1
|
Provenance
The following attestation bundles were made for depadvisor-0.2.0.tar.gz:
Publisher:
release.yml on chaubes/depadvisor
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
depadvisor-0.2.0.tar.gz -
Subject digest:
a9b479173d0753f2c914ec8b102b90395e03a1b1105503f8192ed081fe6a09bd - Sigstore transparency entry: 1315571767
- Sigstore integration time:
-
Permalink:
chaubes/depadvisor@4b672d021835049e3e5eaa990dc9ffdd4f9cb0e1 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/chaubes
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4b672d021835049e3e5eaa990dc9ffdd4f9cb0e1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file depadvisor-0.2.0-py3-none-any.whl.
File metadata
- Download URL: depadvisor-0.2.0-py3-none-any.whl
- Upload date:
- Size: 45.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
31f6a671198fca29808312ff6a6c8fd891e92f74163b5703e57353014ea27f23
|
|
| MD5 |
eb8ee2e6d2eb9db31959f90e437e9a34
|
|
| BLAKE2b-256 |
5236941cd99f6109edc24d92ded85c587dbfcec58ae544be175a283f90520d83
|
Provenance
The following attestation bundles were made for depadvisor-0.2.0-py3-none-any.whl:
Publisher:
release.yml on chaubes/depadvisor
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
depadvisor-0.2.0-py3-none-any.whl -
Subject digest:
31f6a671198fca29808312ff6a6c8fd891e92f74163b5703e57353014ea27f23 - Sigstore transparency entry: 1315571871
- Sigstore integration time:
-
Permalink:
chaubes/depadvisor@4b672d021835049e3e5eaa990dc9ffdd4f9cb0e1 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/chaubes
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4b672d021835049e3e5eaa990dc9ffdd4f9cb0e1 -
Trigger Event:
push
-
Statement type: