jan-cli 0.19.0

YAML-defined CLI trees with progressive help, optional exec aliases, merged extra specs, and SQLite audit logging keyed by git branch
Documentation
# `jan packages`

Inspect and prune package-manager environments (uv, pnpm, gradle).

Envs live under `<cache>/packages/<manager>/<hash>/`, one per distinct declaration. `list` cross-references them with the preferred tree. Each successful run updates `.jan-used` so prune can keep hot caches.

```bash
jan packages                      # same as `jan packages list`
jan packages list --json
jan packages list --orphans
jan packages list --uv
jan packages show csv-summary
jan packages show f16a95ee --json
jan packages path csv-summary --python
jan packages prune --older-than 30d
jan packages prune --yes
```

## Subcommands

### `list`

One row per env (hash, kind, runtime version, size on disk, build age, command chains that use it) plus a **declared but not built yet** section — including decls whose `project:` / `requirements:` path fails to resolve.

### `show <HASH|SCRIPT>`

Canonical declaration plus installed distributions (uv: `*.dist-info`; pnpm: `node_modules`; gradle: jars). Works without the manager on PATH.

### `path <HASH|SCRIPT>`

Print a single path for scripting:

```bash
"$(jan packages path csv-summary --python)" -c 'import pandas; print(pandas.__version__)'
```

| Flag | Meaning |
|------|---------|
| `--bin` | venv `bin` / `node_modules/.bin` / gradle `lib` |
| `--python` | venv interpreter (uv only) |
| `--modules` | `node_modules` (pnpm only) |
| `--lib` | jar lib directory (gradle only) |
| `--classpath` | resolved classpath string (gradle only) |

### `prune`

Removes cached envs that are unused by the preferred tree, older than a threshold, and (optionally) larger than a size floor. Without `--yes` it only prints what would be deleted.

| Flag | Description |
|------|-------------|
| `--orphans` | Only envs no script references (default for prune) |
| `--all` | Also consider envs still referenced by the tree |
| `--older-than DUR` | Min age since last use (default `30d`; `90`, `30d`, `12h`, `45m`, `0` = any age) |
| `--min-size SIZE` | Only envs at least this large (`100M`, `1G`, `512KiB`, `1024`) |
| `--yes`, `-y` | Actually delete |
| `--dry-run`, `-n` | Preview only (default without `--yes`) |

## Scoping

`--uv` / `--pnpm` / `--gradle` restrict list/show/path/prune to one manager. `--json` is machine-readable for `list` and `show`.