dev-prune-darwin-arm64 1.22.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 +62 -10
- 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 thirty-
|
|
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
|
|
|
@@ -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
|
|
|
@@ -602,7 +607,8 @@ process that leaves a dirty working tree is a surprise.
|
|
|
602
607
|
| `devp run [PATH]` | `--dry-run`, `--only`, `--skip`, `--except`, `--min-size`, `--json` | Prunes every registered repository, or one target |
|
|
603
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 |
|
|
604
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 |
|
|
605
|
-
| `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 |
|
|
606
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 |
|
|
607
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 |
|
|
608
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 |
|
|
@@ -667,6 +673,12 @@ Adapters detect the project, verify the lockfile, and own the bloat directories:
|
|
|
667
673
|
| **Stack** (Haskell) *(opt-in)* | `stack.yaml` | `.stack-work` | `stack.yaml` names its `resolver:` (or `snapshot:`) | *(rebuilt by the next `stack build`)* |
|
|
668
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`)* |
|
|
669
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)* |
|
|
670
682
|
|
|
671
683
|
A required binary that is missing is a reason to skip, never a reason to delete: if `npm`
|
|
672
684
|
is not on `PATH`, the `node_modules` it owns is left exactly where it is.
|
|
@@ -778,6 +790,44 @@ For Python, uv or Poetry takes the environment whenever it recognises the projec
|
|
|
778
790
|
between the two, whichever one's lockfile is actually on disk wins — and the
|
|
779
791
|
`requirements.txt` adapter handles everything else.
|
|
780
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
|
+
|
|
781
831
|
---
|
|
782
832
|
|
|
783
833
|
## Configuration
|
|
@@ -1011,7 +1061,7 @@ Full decision flow: [docs/BACKGROUND_AUTOMATION.md](docs/BACKGROUND_AUTOMATION.m
|
|
|
1011
1061
|
|
|
1012
1062
|
| | `dev-prune` | `kondo` | `npkill` | `cargo-clean-all` | `pyclean` | `git clean` | `dust` / `ncdu` | BleachBit |
|
|
1013
1063
|
| :---------------------------------------- | :----------------------: | :---------------: | :------: | :---------------: | :-------: | :-------------: | :-------------: | :-------: |
|
|
1014
|
-
| Package managers | **
|
|
1064
|
+
| Package managers | **36** | ~20 project types | Node | Rust | Python | untracked files | — | OS caches |
|
|
1015
1065
|
| Many projects per repository | **✓** | ✓ | ✗ | ✗ | ✗ | n/a | n/a | ✗ |
|
|
1016
1066
|
| `.git` boundary enforced | **✓** | ✗ | ✗ | ✓ | ✗ | ✓ | ✗ | ✗ |
|
|
1017
1067
|
| Lockfile verified before deleting | **✓** | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
|
|
@@ -1106,7 +1156,9 @@ answer the file header does.
|
|
|
1106
1156
|
> **No analytics, no diagnostics, no usage data** — none collected, none sent. Your
|
|
1107
1157
|
> workspace structure, directory paths and repository names never leave the machine.
|
|
1108
1158
|
>
|
|
1109
|
-
> `dev-prune` makes
|
|
1110
|
-
> public releases endpoint, to tell you when a newer version exists. It has no
|
|
1111
|
-
> carries no identifier, and runs at most once a week. Turn it off with `devp config
|
|
1112
|
-
> 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"],
|