dev-prune-darwin-arm64 1.21.0 → 1.23.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +98 -25
- package/bin/dev-prune +0 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -52,7 +52,7 @@ gigabytes hostage for a build you are not running.
|
|
|
52
52
|
|
|
53
53
|
`dev-prune` finds those directories across every Git repository you register, and deletes
|
|
54
54
|
them — but only after proving the exact command that puts them back would succeed. It
|
|
55
|
-
knows
|
|
55
|
+
knows thirty-six package managers, not just the obvious four: Composer, Bundler, Mix,
|
|
56
56
|
CocoaPods and Terraform are as first-class as npm and pip. It is one Rust program,
|
|
57
57
|
installs its own background schedule, and answers to two names you type — `dev-prune` and
|
|
58
58
|
`devp` — alongside a third, windowless build, `devpw`, that exists only so the Windows
|
|
@@ -78,7 +78,7 @@ mental note about which ones are safe.
|
|
|
78
78
|
|
|
79
79
|
**Start here** [Install](#install) · [Where it is published](#every-place-it-is-published) · [Editors](#in-your-editor) · [60-second tour](#60-second-tour) · [What it looks like](#what-it-looks-like)
|
|
80
80
|
|
|
81
|
-
**How it thinks** [Why it is safe](#why-it-is-safe) · [Features](#features) · [Commands](#commands) · [Ecosystems](#supported-ecosystems) · [Monorepos](#repositories-with-more-than-one-ecosystem)
|
|
81
|
+
**How it thinks** [Why it is safe](#why-it-is-safe) · [Features](#features) · [Commands](#commands) · [Ecosystems](#supported-ecosystems) · [Monorepos](#repositories-with-more-than-one-ecosystem) · [JavaScript](#if-you-write-javascript) · [Python](#if-you-write-python)
|
|
82
82
|
|
|
83
83
|
**Running it** [Configuration](#configuration) · [Automation](#background-automation) · [Comparison](#how-it-compares) · [Architecture](#architecture) · [Docs](#documentation)
|
|
84
84
|
|
|
@@ -369,7 +369,7 @@ devp history # which pass reclaimed it, and what started that pas
|
|
|
369
369
|
devp history --pass 1 # the exact command line, and every directory it took
|
|
370
370
|
devp caches # every package manager cache, sized. The report deletes nothing
|
|
371
371
|
devp caches docker # what Docker holds, and the prune commands
|
|
372
|
-
devp caches clear docker # run the narrow ones —
|
|
372
|
+
devp caches clear docker # run the narrow ones — no volume unless you name it, never on a schedule
|
|
373
373
|
devp status --drift # anything installed that the lockfiles don't record?
|
|
374
374
|
devp doctor . # why is this repository not being pruned?
|
|
375
375
|
devp doctor --fix # repair a broken integration — never a first-time install
|
|
@@ -412,8 +412,13 @@ last pruned. The footer totals the repositories, how many of them are candidates
|
|
|
412
412
|
much is reclaimable right now.
|
|
413
413
|
|
|
414
414
|
With a TTY the table is interactive: `↑`/`↓` move, `p` pre-selects every candidate,
|
|
415
|
-
`Space` deselects the one you are keeping, `Enter` prunes the rest, `i`
|
|
416
|
-
a repository, `q` exits.
|
|
415
|
+
`Space` deselects the one you are keeping, `Enter` prunes the rest, `i` asks and then
|
|
416
|
+
toggles ignore for a repository, `q` exits. On a terminal at least 110 columns wide an
|
|
417
|
+
inspector pane sits beside the table (below it on a narrower one with the rows to spare):
|
|
418
|
+
the selected repository's per-directory sizes, root-commit identity, idle window, lifetime
|
|
419
|
+
space saved, a sparkline of its commits over the last 26 weeks and the largest entries
|
|
420
|
+
inside its bloat. `Tab` hides and shows it. Without a TTY, the same table is printed and
|
|
421
|
+
the command exits.
|
|
417
422
|
|
|
418
423
|
</details>
|
|
419
424
|
|
|
@@ -479,13 +484,26 @@ them and asking, and counts what came back on its own line in `devp stats`. Prin
|
|
|
479
484
|
commands and asking you to go and type one in another window meant whatever you reclaimed
|
|
480
485
|
on its advice was yours to have remembered, and dev-prune could not account for it.
|
|
481
486
|
|
|
482
|
-
**It will not
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
487
|
+
**It will not bulk-delete volumes, and no flag makes it.** No argument in the reclaim
|
|
488
|
+
table contains the word volume, a unit test fails the build if one appears, and dev-prune
|
|
489
|
+
never runs `volume prune` or `system prune --volumes`. That is a different promise from
|
|
490
|
+
the lockfile rule: an image can be pulled again and a build cache rebuilt, so those are a
|
|
491
|
+
question of consent and the prompt is the consent. What is inside a volume is the only
|
|
492
|
+
copy, so a volume goes only when someone names it. That naming has a spelling now:
|
|
493
|
+
`devp caches clear docker --include-volumes` (docker and podman) lists the unused
|
|
494
|
+
volumes by name after the narrow steps run and you type the numbers of the ones to
|
|
495
|
+
delete, each pick one unforced `volume rm`. It refuses `--yes`, `--json` and a piped
|
|
496
|
+
stdin, so no script or scheduler can reach it. The one unattended spelling is
|
|
497
|
+
`--include-volumes --dry-run`, which deletes nothing: it lists the unused volumes by
|
|
498
|
+
name with the command to paste, so an agent can prepare everything and a person runs
|
|
499
|
+
the final command at a terminal, and what the picks free is then counted on
|
|
500
|
+
`devp stats`, which a `volume rm` typed straight at the engine would not be. The pick
|
|
501
|
+
list arms only within ten minutes of a completed dry run for that engine: typed cold,
|
|
502
|
+
the real command runs the dry run instead and says so, and the same line typed again
|
|
503
|
+
within ten minutes reaches the picking. Without
|
|
504
|
+
the flag, the estimate still
|
|
505
|
+
says how much unused-volume space is being left alone rather than folding it into a
|
|
506
|
+
number these commands cannot deliver.
|
|
489
507
|
|
|
490
508
|
The figures come from the engine's own `system df`, not a walk of the disk. On Docker
|
|
491
509
|
Desktop and Podman the store lives inside a VM disk image the host filesystem cannot see,
|
|
@@ -564,7 +582,7 @@ process that leaves a dirty working tree is a surprise.
|
|
|
564
582
|
| 🧩 **Any number of ecosystems per repository** | uv, npm and cargo in one root, or spread across `frontend/`, `services/api/` and `tools/cli/` — each discovered, verified and pruned on its own terms |
|
|
565
583
|
| ↩️ **One-command restore** | `devp restore .` reinstalls a tree; `devp restore --last-run` puts back exactly what the most recent pass deleted, across every repository it touched |
|
|
566
584
|
| 🕒 **Activity-aware** | Combines `git log` timestamps with source-file `mtime`, so uncommitted work protects a repository just as a commit does |
|
|
567
|
-
| 🐳 **Container report** | `devp caches docker` (also `devp caches podman`, and `devp caches containers <engine>` for `nerdctl`, `finch` or Apple's `container` — the engine name is an argument to `containers`, never a subcommand of its own — or `devp caches containers` on its own for every engine it finds plus local Kubernetes clusters) breaks a container engine's disk into images, containers, local volumes and build cache, each with what the engine itself calls reclaimable, and prints the prune commands narrowest first with what each takes with it. `devp caches clear docker` then runs the narrow ones for you, after asking, and counts them in `devp stats` — **
|
|
585
|
+
| 🐳 **Container report** | `devp caches docker` (also `devp caches podman`, and `devp caches containers <engine>` for `nerdctl`, `finch` or Apple's `container` — the engine name is an argument to `containers`, never a subcommand of its own — or `devp caches containers` on its own for every engine it finds plus local Kubernetes clusters) breaks a container engine's disk into images, containers, local volumes and build cache, each with what the engine itself calls reclaimable, and prints the prune commands narrowest first with what each takes with it. `devp caches clear docker` then runs the narrow ones for you, after asking, and counts them in `devp stats` — **no volume unless you pick it by name** (`--include-volumes`, a terminal-only list you choose from, one unforced `volume rm` per pick, never `volume prune`), and never from a scheduler or a hook. `devp caches` carries a one-line summary per engine, outside its own total |
|
|
568
586
|
| 📊 **Cache report** | `devp caches` sizes every package manager cache and store on the machine — npm to cargo to conda, Maven, Gradle, NuGet, vcpkg, Conan, Composer, CocoaPods, Hex, Bundler, pub, SwiftPM, Terraform, Poetry, PDM and Deno — and prints the command that clears each. It also finds the stores that belong to no package manager at all and are routinely the largest things in the list: the Playwright and Puppeteer browser bundles, the Cypress binary cache, the Electron and electron-builder download caches, and the HuggingFace hub — a whole browser or model per version, and nothing ever removes the old one. The report is read-only; `devp caches clear <manager>` runs that command for you, after asking. `devp config set cache_max_gb default=10` says how big is too big — for every manager at once, or per manager with `default=10,npm=4` — and marks the ones past it — `devp caches clear --over-cap all` then empties exactly those, still only when you type it. Each manager also says how many of your registered repositories use it and what that works out to per repository, and `devp caches clear --unused all` empties the ones nothing uses at all. pnpm is reported once per filesystem, because a store it hardlinks into `node_modules` cannot cross one and projects kept off the system disk get a store of their own. Nothing on a schedule ever touches a cache, and Maven's `~/.m2/repository` is never cleared at all — it holds artifacts `mvn install:install-file` put there that no remote can hand back |
|
|
569
587
|
| 🩺 **`devp doctor`** | One read-only pass that ends by naming the *single* reason a repository would or would not be pruned. Runs no package manager, repairs nothing, safe to run twice. `devp doctor --fix` then mends what it found — installed-but-broken only |
|
|
570
588
|
| 🤖 **Self-installing automation** | OS-native scheduler (Task Scheduler, LaunchAgent, systemd user timer) and non-blocking Git hooks, installed once the first run’s walkthrough is accepted (quitting it installs nothing) and restored after an upgrade. `auto_setup`, `auto_hooks`, `auto_daemon` or `DEV_PRUNE_NO_AUTO_SETUP=1` turn it off |
|
|
@@ -589,10 +607,11 @@ process that leaves a dirty working tree is a surprise.
|
|
|
589
607
|
| `devp run [PATH]` | `--dry-run`, `--only`, `--skip`, `--except`, `--min-size`, `--json` | Prunes every registered repository, or one target |
|
|
590
608
|
| `devp status` | `--top N`, `--drift`, `--json` | Interactive dashboard; a plain table when there is no TTY. `--top N` shows only the N biggest repositories; `--drift` lists every environment holding packages its lockfile never recorded |
|
|
591
609
|
| `devp stats` | `--json` | What has already been reclaimed: lifetime total from pruning, a separate lifetime total from `devp caches clear`, prune passes, the last pass, the biggest contributors, which package managers the space came from, and how many passes you typed rather than scheduled |
|
|
592
|
-
| `devp history` | `--pass N`, `--limit N`, `--all`, `--json`, `--export [PATH]`
|
|
610
|
+
| `devp history` | `--pass N`, `--limit N`, `--all`, `--scores`, `--json`, `--export [PATH]` | Which pass deleted what, and what asked it to — one line per pass, `--pass N` for full details, and `--scores` for all-time records. `--export` writes the lot to your documents folder |
|
|
611
|
+
| `devp scores` | `devp history --scores`, `--json` | High scores leaderboard: Gold, Silver and Bronze badges for largest single-repository cleanups and single-pass record totals |
|
|
593
612
|
| `devp completions` | `bash`, `zsh`, `fish`, `powershell`, `elvish` | Prints a shell completion script to stdout, generated from the same argument definitions the binary parses with |
|
|
594
613
|
| `devp caches` | `clear <manager\|all>`, `--json` | Sizes every package manager cache on the machine and prints the command that clears each. The report deletes nothing and nothing on a schedule ever will; `clear` empties one when you type it, after asking |
|
|
595
|
-
| `devp caches docker` | `podman`, `containers [ENGINE]` (`nerdctl`, `finch`, `container`), `--json` | What a container engine holds — images, containers, volumes, build cache — each sized, with what the engine calls reclaimable, then the prune commands. The report deletes nothing; `devp caches clear <engine>` runs the narrow ones when you name it
|
|
614
|
+
| `devp caches docker` | `podman`, `containers [ENGINE]` (`nerdctl`, `finch`, `container`), `--json` | What a container engine holds — images, containers, volumes, build cache — each sized, with what the engine calls reclaimable, then the prune commands. The report deletes nothing; `devp caches clear <engine>` runs the narrow ones when you name it — a volume only through `--include-volumes`, picked by name at a terminal |
|
|
596
615
|
| `devp trust` | `--json` | What dev-prune may do on this machine: the guarantees the code enforces, then the scheduler, hooks and settings read live, then every copy of dev-prune on the machine with the manager that installed it and its SHA-256. Read-only |
|
|
597
616
|
| `devp restore [PATH]` | `--last-run` | Reinstalls dependencies for every project in a tree; `--last-run` undoes the last prune pass |
|
|
598
617
|
| `devp doctor [PATH]` | `--fix` | Diagnoses the installation, or one repository — ending with the single reason a pass would or would not touch it. `--fix` repairs what the checks found; it never performs a first-time install |
|
|
@@ -634,6 +653,7 @@ Adapters detect the project, verify the lockfile, and own the bloat directories:
|
|
|
634
653
|
| **PDM** (Python) | `pdm.lock`, `[tool.pdm]` or `pdm.backend` in `pyproject.toml` | `.venv`, `__pypackages__` | `pdm lock --check` | `pdm install` |
|
|
635
654
|
| **Pipenv** (Python) | `Pipfile` | `.venv` *(in-project installs only)* | `pipenv verify` | `pipenv install --deploy` |
|
|
636
655
|
| **venv** (Python) | `requirements.txt` + a directory containing `pyvenv.cfg` | every directory containing `pyvenv.cfg` | `requirements.txt` must exist and list at least one package | `python -m venv .venv && pip install -r requirements.txt` |
|
|
656
|
+
| **pixi** (Python/conda) | `pixi.toml`, `pixi.lock`, `[tool.pixi]` in `pyproject.toml` | `.pixi` | `pixi.lock` carries its `version:` and records at least one conda or PyPI package | `pixi install` |
|
|
637
657
|
| **Cargo** (Rust) *(opt-in)* | `Cargo.toml` | `target` | `cargo metadata --locked` | *(rebuilt by the next `cargo build`)* |
|
|
638
658
|
| **Go** | `go.mod` | `vendor` | `go mod download` | `go mod vendor` |
|
|
639
659
|
| **Composer** (PHP) | `composer.json` | `vendor` | `composer validate --no-check-publish --no-check-all` | `composer install` |
|
|
@@ -649,15 +669,28 @@ Adapters detect the project, verify the lockfile, and own the bloat directories:
|
|
|
649
669
|
| **vcpkg** (C/C++) *(opt-in)* | `vcpkg.json` | `vcpkg_installed` | `vcpkg.json` declares a non-empty `dependencies` list | *(rebuilt by the next `vcpkg install`)* |
|
|
650
670
|
| **CMake** (C/C++) *(opt-in)* | `CMakeLists.txt` | any tree holding a `CMakeCache.txt` | the tree's own `CMakeCache.txt` names a source directory inside this repository | *(rebuilt by the next `cmake --build`)* |
|
|
651
671
|
| **.NET build** *(opt-in)* | `*.csproj`, `*.fsproj`, `*.vbproj` | `obj`, and `bin` beside it *(only while `bin` holds nothing but `Debug`/`Release`)* | `obj/project.assets.json` names a project file still sitting in this directory, and every project file here has a `<Project` root | *(rebuilt by the next `dotnet build`)* |
|
|
672
|
+
| **Zig** *(opt-in)* | `build.zig` | `.zig-cache`, `zig-cache`, `zig-out` | `build.zig` declares a `pub fn build` — the rebuild-from-source proof | *(rebuilt by the next `zig build`)* |
|
|
673
|
+
| **Stack** (Haskell) *(opt-in)* | `stack.yaml` | `.stack-work` | `stack.yaml` names its `resolver:` (or `snapshot:`) | *(rebuilt by the next `stack build`)* |
|
|
674
|
+
| **Cabal** (Haskell) *(opt-in)* | `cabal.project` | `dist-newstyle` | `cabal.project` declares its `packages` — a lone `*.cabal` file is never claimed | *(rebuilt by the next `cabal build`)* |
|
|
675
|
+
| **sbt** (Scala) *(opt-in)* | `build.sbt` | `target`, `project/target` | `build.sbt` carries a setting, or `project/build.properties` pins `sbt.version` | *(rebuilt by the next `sbt compile`)* |
|
|
676
|
+
| **pycache** (Python) | Python files (`*.py`, `pyproject.toml`) | `__pycache__`, `.pytest_cache`, `.mypy_cache`, `.ruff_cache` | Source Python files present — safe bytecode/linter caches | *(regenerated automatically on next test/execution run)* |
|
|
677
|
+
| **Godot** *(opt-in)* | `project.godot` | `.godot`, `.import` | `project.godot` present with engine configuration | *(re-imported automatically on next editor launch)* |
|
|
678
|
+
| **Unity** *(opt-in)* | `ProjectSettings/ProjectVersion.txt` | `Library` | Project version file present and readable | *(re-imported automatically on next editor launch)* |
|
|
679
|
+
| **Unreal Engine** *(opt-in)* | `*.uproject` | `DerivedDataCache`, `Intermediate` | Valid `.uproject` JSON manifest present | *(re-compiled on next project build / editor launch)* |
|
|
680
|
+
| **Defold** *(opt-in)* | `game.project` | `build` | `game.project` configuration file present | *(rebuilt by next Defold build)* |
|
|
681
|
+
| **Cocos Creator** *(opt-in)* | `project.json` | `library`, `temp` | Cocos `project.json` configuration present | *(re-imported on next Cocos editor launch)* |
|
|
652
682
|
|
|
653
683
|
A required binary that is missing is a reason to skip, never a reason to delete: if `npm`
|
|
654
684
|
is not on `PATH`, the `node_modules` it owns is left exactly where it is.
|
|
655
685
|
|
|
656
|
-
The
|
|
686
|
+
The eighteen build-tool adapters ship **disabled**, because a build tree is regenerated
|
|
657
687
|
by recompiling, not downloading — it costs more to get back. `devp config set
|
|
658
688
|
enable_cargo true` / `enable_gradle true` / `enable_maven true` / `enable_swift true` /
|
|
659
689
|
`enable_dart true` / `enable_mix_build true` / `enable_vcpkg true` /
|
|
660
|
-
`enable_cmake_build true` / `enable_dotnet_build true`
|
|
690
|
+
`enable_cmake_build true` / `enable_dotnet_build true` / `enable_godot true` /
|
|
691
|
+
`enable_unity true` / `enable_unreal true` / `enable_defold true` /
|
|
692
|
+
`enable_cocos true` / `enable_zig true` / `enable_stack true` /
|
|
693
|
+
`enable_cabal true` / `enable_sbt true` switches them on, and their candidates wait for
|
|
661
694
|
`build_idle_days` (45 by default), applied as the *maximum* of it and `idle_days` — the
|
|
662
695
|
build-tool gate only ever makes pruning later, never earlier.
|
|
663
696
|
|
|
@@ -757,6 +790,44 @@ For Python, uv or Poetry takes the environment whenever it recognises the projec
|
|
|
757
790
|
between the two, whichever one's lockfile is actually on disk wins — and the
|
|
758
791
|
`requirements.txt` adapter handles everything else.
|
|
759
792
|
|
|
793
|
+
### If you write JavaScript
|
|
794
|
+
|
|
795
|
+
`node_modules` is usually the largest directory in a JavaScript repository, and every
|
|
796
|
+
project you have stopped touching still has one. dev-prune proves the lockfile can put
|
|
797
|
+
it back before deleting it (`npm ci --dry-run`, `pnpm install --frozen-lockfile
|
|
798
|
+
--lockfile-only` and the rest, all read-only), and only once the repository has been
|
|
799
|
+
idle for `idle_days`:
|
|
800
|
+
|
|
801
|
+
```
|
|
802
|
+
devp run --dry-run # which node_modules would go, and how much each frees
|
|
803
|
+
devp run -y # delete them
|
|
804
|
+
devp restore . # back in this project: npm ci, pnpm install, yarn or bun
|
|
805
|
+
```
|
|
806
|
+
|
|
807
|
+
`devp restore --last-run` reinstalls everything the last pass deleted, across every
|
|
808
|
+
repository it touched. A `node_modules` holding a package installed with `npm install
|
|
809
|
+
--no-save` is refused rather than pruned, because the lockfile cannot bring it back;
|
|
810
|
+
`devp status --drift` lists those ahead of time with the `npm install <pkg>` that
|
|
811
|
+
records them. Build output such as `dist/` or `.next` is never touched.
|
|
812
|
+
|
|
813
|
+
### If you write Python
|
|
814
|
+
|
|
815
|
+
A `.venv` holds its own copy of every package the project installed, and a few old
|
|
816
|
+
projects with machine-learning dependencies can hold several gigabytes each. dev-prune
|
|
817
|
+
verifies each environment against the tool that built it (uv, Poetry, PDM, Pipenv,
|
|
818
|
+
pixi, or a plain venv beside a `requirements.txt`) and refuses one holding a package
|
|
819
|
+
that was `pip install`ed by hand and never recorded; `devp status --drift` names those
|
|
820
|
+
and the `uv add` or `pip freeze > requirements.txt` that fixes it.
|
|
821
|
+
|
|
822
|
+
`devp restore .` rebuilds the environment with the same tool (`uv sync`, `poetry
|
|
823
|
+
install`, `pdm install`, and so on). `devp restore --last-run` rebuilds each one on the
|
|
824
|
+
Python version it was first built with, read from its `pyvenv.cfg`, because a 3.12
|
|
825
|
+
environment rebuilt on 3.14 can resolve different wheels. If that version is no longer
|
|
826
|
+
installed, it asks once and prints the `uv python install` line that fixes it.
|
|
827
|
+
|
|
828
|
+
`__pycache__`, `.pytest_cache`, `.mypy_cache` and `.ruff_cache` go too. They refill on
|
|
829
|
+
the next import or test run, so there is nothing to restore.
|
|
830
|
+
|
|
760
831
|
---
|
|
761
832
|
|
|
762
833
|
## Configuration
|
|
@@ -768,12 +839,12 @@ once on a first install — so the defaults are something you agreed to rather t
|
|
|
768
839
|
inherited — and again after an upgrade adds a setting you have never been shown.
|
|
769
840
|
|
|
770
841
|
If you already know what you want, `devp config recommended` is the one-command version:
|
|
771
|
-
it turns on the
|
|
842
|
+
it turns on the eighteen adapters and build trees that are off by default because they are
|
|
772
843
|
not universally wanted, and leaves `allow_manifest_rewrite` — the one recommendation
|
|
773
844
|
that edits files Git tracks — named, explained and off unless you add
|
|
774
845
|
`--with-cautious`. `devp config show` lists whatever you have not taken yet.
|
|
775
846
|
|
|
776
|
-
|
|
847
|
+
Forty-one settings, in the seven groups the configurator asks them in — the order the
|
|
777
848
|
decisions actually arrive in. Every key, with its full description and range, is in the
|
|
778
849
|
[CLI reference](docs/CLI_REFERENCE.md#8-devp-config-action).
|
|
779
850
|
|
|
@@ -806,7 +877,7 @@ rather than downloading. That is the whole reason each one is a switch.
|
|
|
806
877
|
|
|
807
878
|
| Key | Default | Meaning |
|
|
808
879
|
| :--- | :---: | :--- |
|
|
809
|
-
| `enable_cargo` … `
|
|
880
|
+
| `enable_cargo` … `enable_sbt` | `false` | Turn on an opt-in build-tool adapter; `build_idle_days` (`45`) gates all eighteen |
|
|
810
881
|
|
|
811
882
|
**Shared download caches** — one key, because the cap only ever marks.
|
|
812
883
|
|
|
@@ -990,7 +1061,7 @@ Full decision flow: [docs/BACKGROUND_AUTOMATION.md](docs/BACKGROUND_AUTOMATION.m
|
|
|
990
1061
|
|
|
991
1062
|
| | `dev-prune` | `kondo` | `npkill` | `cargo-clean-all` | `pyclean` | `git clean` | `dust` / `ncdu` | BleachBit |
|
|
992
1063
|
| :---------------------------------------- | :----------------------: | :---------------: | :------: | :---------------: | :-------: | :-------------: | :-------------: | :-------: |
|
|
993
|
-
| Package managers | **
|
|
1064
|
+
| Package managers | **36** | ~20 project types | Node | Rust | Python | untracked files | — | OS caches |
|
|
994
1065
|
| Many projects per repository | **✓** | ✓ | ✗ | ✗ | ✗ | n/a | n/a | ✗ |
|
|
995
1066
|
| `.git` boundary enforced | **✓** | ✗ | ✗ | ✓ | ✗ | ✓ | ✗ | ✗ |
|
|
996
1067
|
| Lockfile verified before deleting | **✓** | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
|
|
@@ -1085,7 +1156,9 @@ answer the file header does.
|
|
|
1085
1156
|
> **No analytics, no diagnostics, no usage data** — none collected, none sent. Your
|
|
1086
1157
|
> workspace structure, directory paths and repository names never leave the machine.
|
|
1087
1158
|
>
|
|
1088
|
-
> `dev-prune` makes
|
|
1089
|
-
> public releases endpoint, to tell you when a newer version exists. It has no
|
|
1090
|
-
> carries no identifier, and runs at most once a week. Turn it off with `devp config
|
|
1091
|
-
> update_check false`.
|
|
1159
|
+
> On its own, `dev-prune` makes one network request: an unauthenticated `GET` to
|
|
1160
|
+
> GitHub's public releases endpoint, to tell you when a newer version exists. It has no
|
|
1161
|
+
> body, carries no identifier, and runs at most once a week. Turn it off with `devp config
|
|
1162
|
+
> set update_check false`. Because `auto_update` is on by default, a newer release that
|
|
1163
|
+
> check finds is downloaded and verified at the end of a prune pass; `devp config set
|
|
1164
|
+
> auto_update false` leaves that to you. Full detail in [docs/PRIVACY.md](docs/PRIVACY.md).
|
package/bin/dev-prune
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dev-prune-darwin-arm64",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.23.0",
|
|
4
4
|
"description": "Prebuilt dev-prune binary for darwin arm64. Installed automatically by the 'dev-prune' package; not meant to be depended on directly.",
|
|
5
5
|
"os": ["darwin"],
|
|
6
6
|
"cpu": ["arm64"],
|