oneport-depcheck
Dependency CVE gate — deterministic detection, LLM-triaged exploitability.
Every scanner can tell you requests==2.19.1 has a CVE. Depcheck tells you
whether your code can actually hit it — so the 3 vulnerabilities that matter
surface above the 40 that don't.
1. [HIGH] [REACHABLE] requests==2.19.1 CVE-2018-18074
requirements.txt:2
Why: fetch.py:8 calls requests.get() on user-supplied URLs that can
redirect cross-origin, leaking the Authorization header — live.
Fix: upgrade to 2.20.0 - Minor upgrade (2.19 -> 2.20) - low breakage risk.
requests==2.20.0
Architecture: detection is deterministic, judgment is LLM
- Deterministic core (no model, ever). Manifests and lockfiles are parsed
locally; each pinned
package==versionis checked against OSV.dev (free, public, no key). Severity is computed from the advisory's CVSS vector — same input, same output, every time. The model is never asked whether a package is vulnerable. License risks (GPL/AGPL in a proprietary repo) are flagged the same way. - LLM triage (the judgment layer). For each confirmed CVE, depcheck
greps your codebase for actual usage of the package (imports, call sites,
file:line) and asks the model one question: is the vulnerable path
exploitable here? Verdicts:
REACHABLE,LIKELY-UNREACHABLE,DEV-ONLY. Dev-only deps and never-imported packages are classified deterministically without a model call. - Upgrade guidance. Safe target version (clears every CVE for the package), a one-line what-might-break note from the semver gap, and the exact manifest line change as a committable suggestion.
Install
pip install oneport-depcheck
export GEMINI_API_KEY=AIza... # free at https://aistudio.google.com/apikey
ANTHROPIC_API_KEY also works (Claude). No key at all? scan --no-llm still
runs full deterministic detection.
Usage
oneport-depcheck scan # scan ./ manifests
oneport-depcheck scan path/to/repo --fix # + consolidated fix plan
oneport-depcheck scan --format json # machine-readable
oneport-depcheck scan --min-severity high # hide LOW/MEDIUM
oneport-depcheck scan --fail-on any # CI: exit 1 on any CVE
oneport-depcheck scan --fail-on reachable # CI: exit 1 only if exploitable (default)
oneport-depcheck scan --post https://github.com/org/repo/pull/42
--post posts inline PR comments on the exact manifest lines (with one-click
committable suggestion blocks for pin bumps) plus a sticky summary table
that updates in place on re-runs (hidden HTML marker — no server needed).
Supported manifests
requirements.txt (+ requirements-dev.txt variants) · poetry.lock ·
Pipfile.lock · package.json · package-lock.json (v1–v3)
Unpinned requirements can't be checked against a version database; depcheck lists them as skipped rather than silently claiming they're clean.
CI gate
- run: pip install oneport-depcheck
- run: oneport-depcheck scan --fail-on reachable
env:
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
Exit codes: 0 pass · 1 gate failed · 2 usage/auth/OSV error.
UNTRIAGED findings fail the reachable gate — unverified is not safe.
Team guidelines
.oneport/guidelines.md (shared with all Oneport tools) is injected into the
triage prompt:
oneport-depcheck learn "dev-dependency CVEs are warn-only"
DEV-ONLY findings never fail --fail-on reachable by design.
Privacy
Serverless — see PRIVACY.md. Package names/versions go to OSV.dev and the package registries (public data); usage snippets of vulnerable packages go to the model on your API key. Nothing else leaves the machine.
What this is not
- Not a guess engine: every vulnerability reported has an OSV.dev id you can look up. If OSV doesn't know it, depcheck doesn't report it.
- Not a replacement for upgrading:
LIKELY-UNREACHABLEmeans lower priority right now, not never fix.
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 oneport_depcheck-1.1.0.tar.gz.
File metadata
- Download URL: oneport_depcheck-1.1.0.tar.gz
- Upload date:
- Size: 42.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6e80a4c81fc25548e20a6e718f82e75d07a1788a105eaa8fe4f900edf9f608a1
|
|
| MD5 |
916f6d1f1a29e1d88adf26da2b455195
|
|
| BLAKE2b-256 |
0ed41ea242cb004b0eacdec307fd92049a79e6896681ea4dd1141e3d03e1ddf0
|
File details
Details for the file oneport_depcheck-1.1.0-py3-none-any.whl.
File metadata
- Download URL: oneport_depcheck-1.1.0-py3-none-any.whl
- Upload date:
- Size: 49.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f235955ea6b6bd4f7d788ce1df44a3e0e8253e30d40fff26a49c96c33d2cef79
|
|
| MD5 |
6acc110b8b50e5ec226e6d8dc1ed7011
|
|
| BLAKE2b-256 |
5bfcce3e8a009cfb154aff5dbd3a3720991dbcde230de61d622a6c43a907aa91
|