v2.7.0
Better verdicts
- Every embedded file now gets graded — the old 100-member cap silently skipped deep archive entries, so a hostile file at index 347 never elevated its parent. It does now.
- Registry findings (e.g. security-withdrawn packages) are applied to fetched dependencies before grading, so a pulled npm package flagged by the registry shows that finding in its own report — not just the parent's.
- Duplicate dependency fetches reduced: a versionless purl is skipped when a lockfile-pinned version of the same package is present.
Encrypted archives
- New repeatable --zip-password flag, plumbed through CLI, server, and workers. Passwords are redacted from logs and recorded command lines.
LLM interpretation (--interpret)
- Any non-benign verdict now reaches the LLM — previously a container elevated to hostile by a member could ship uninterpreted if its raw probability was low.
- Prompts capped at the 2 riskiest dependency subjects, worst-first. Fixes 1.2 MB prompts (Kibana: 257 subjects) being rejected outright with a 400.
- 4xx error bodies are preserved, so a bad model name or over-budget prompt is diagnosable instead of a bare "400 Bad Request".
Terminal output
- Containers with multiple notable packages render per-package cards, ranked worst-first, with an "N hostile · N suspicious · N clean inside" summary. Cards show the top 6 members plus anything referenced by a finding; the rest collapse to "+N quieter files".
- Dependency-tree rows show which manifest declared them (archive-relative path, e.g. demo.zip/…/package.json).
- Single-file scans get a spinner with elapsed time and the member currently being analyzed.
Under the hood
- GitHub Actions workflows now tracked as CI dependencies.
- jemalloc allocator and its config unified in one place (config shared from cleave).