dev-prune 1.10.0 → 1.12.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.
Files changed (2) hide show
  1. package/README.md +36 -16
  2. package/package.json +8 -8
package/README.md CHANGED
@@ -667,7 +667,8 @@ window for every adapter under it.
667
667
 
668
668
  A download cache is a bet that re-downloading costs less than the disk it occupies,
669
669
  and somewhere the bet stops paying. `devp config set cache_max_gb uv=10,npm=10` is
670
- where you say where: a ceiling in gibibytes, per manager, measured against that
670
+ where you say where: a ceiling in gibibytes GiB, the unit the report prints —
671
+ per manager, measured against that
671
672
  manager's whole footprint. A manager over its cap is **marked** in `devp caches` —
672
673
  setting one deletes nothing — and `devp caches clear --over-cap all` empties exactly
673
674
  what is marked, when you type it. It is keyed by the names `devp caches clear` takes
@@ -913,6 +914,24 @@ the two lists **add up**. A list is not a decision, so a team declaration never
913
914
  one you wrote yourself, and naming the same path in both leaves one directory, rebuilt
914
915
  by the committed command.
915
916
 
917
+ And because the committed file is the whole team's, one declaration can be right for
918
+ everybody but you — the directory the project regenerates is the one your copy happens
919
+ to be holding something in. `prunable.exclude` is how you say so without editing a file
920
+ your colleagues share:
921
+
922
+ ```json
923
+ { "prunable": { "exclude": ["tools/vendor"] } }
924
+ ```
925
+
926
+ Spelled the way a `path` is, so `tools/vendor`, `tools/vendor/`, `./tools/vendor` and
927
+ `tools\vendor` are one path; an exclusion that missed on a trailing slash would delete
928
+ the exact directory it was written to keep. It is honoured from whichever file names it,
929
+ because a veto only ever deletes less, and the entry it names leaves the pass entirely —
930
+ not deleted, and not reported as a refusal on every run either. Naming the same path in
931
+ both lists of one file is a typo rather than a decision, since the exclusion wins and the
932
+ declaration then never runs; `devp doctor` points that out. Delete the exclusion and
933
+ the declaration is back in force.
934
+
916
935
  An out-of-range value is rejected with the range in the message rather than silently
917
936
  clamped. `scan_depth` included: `config set` accepts `1`–`32` and refuses anything else
918
937
  outright — the clamp to that range survives only as the backstop for a hand-edited
@@ -946,21 +965,21 @@ Full decision flow: [docs/BACKGROUND_AUTOMATION.md](docs/BACKGROUND_AUTOMATION.m
946
965
 
947
966
  ## How it compares
948
967
 
949
- | | `dev-prune` | `npkill` | `cargo-clean-all` | `pyclean` | `git clean` | `dust` / `ncdu` | BleachBit |
950
- | :---------------------------------------- | :-------------------------: | :------: | :---------------: | :-------: | :-------------: | :-------------: | :-------: |
951
- | Ecosystems | **JS/TS, Python, Rust, Go** | Node | Rust | Python | untracked files | — | OS caches |
952
- | Many projects per repository | **✓** | ✗ | ✗ | ✗ | n/a | n/a | ✗ |
953
- | `.git` boundary enforced | **✓** | ✗ | ✓ | ✗ | ✓ | ✗ | ✗ |
954
- | Lockfile verified before deleting | **✓** | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
955
- | Commit log **and** `mtime` activity check | **✓** | ✗ | `mtime` only | ✗ | ✗ | ✗ | ✗ |
956
- | One-command restore | **✓** | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
957
- | Undo the last pass | **✓** | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
958
- | Background scheduler | **✓** | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
959
- | Git hook auto-registration | **✓** | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
960
- | Per-repository config + 0ms opt-out | **✓** | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
961
- | Machine-readable `--json` | **✓** | ✗ | ✗ | ✗ | ✗ | partial | ✗ |
962
- | AI agent skill | **✓** | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
963
- | Runtime required | **none** (static binary) | Node.js | none | Python | none | none | Python |
968
+ | | `dev-prune` | `kondo` | `npkill` | `cargo-clean-all` | `pyclean` | `git clean` | `dust` / `ncdu` | BleachBit |
969
+ | :---------------------------------------- | :----------------------: | :---------------: | :------: | :---------------: | :-------: | :-------------: | :-------------: | :-------: |
970
+ | Package managers | **23** | ~20 project types | Node | Rust | Python | untracked files | — | OS caches |
971
+ | Many projects per repository | **✓** | ✓ | ✗ | ✗ | ✗ | n/a | n/a | ✗ |
972
+ | `.git` boundary enforced | **✓** | ✗ | ✗ | ✓ | ✗ | ✓ | ✗ | ✗ |
973
+ | Lockfile verified before deleting | **✓** | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
974
+ | Commit log **and** `mtime` activity check | **✓** | `mtime` only | ✗ | `mtime` only | ✗ | ✗ | ✗ | ✗ |
975
+ | One-command restore | **✓** | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
976
+ | Undo the last pass | **✓** | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
977
+ | Background scheduler | **✓** | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
978
+ | Git hook auto-registration | **✓** | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
979
+ | Per-repository config + 0ms opt-out | **✓** | `--ignored-dirs` | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
980
+ | Machine-readable `--json` | **✓** | ✗ | ✗ | ✗ | ✗ | ✗ | partial | ✗ |
981
+ | AI agent skill | **✓** | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
982
+ | Runtime required | **none** (static binary) | none | Node.js | none | Python | none | none | Python |
964
983
 
965
984
  Longer analysis: [docs/MARKET_ANALYSIS.md](docs/MARKET_ANALYSIS.md).
966
985
 
@@ -1019,6 +1038,7 @@ Deeper: [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) ·
1019
1038
  | [Documentation hub](docs/README.md) | Index of everything below |
1020
1039
  | [CLI reference](docs/CLI_REFERENCE.md) | Every command, flag, setting, exit code and `--json` document |
1021
1040
  | [Safety invariants](docs/SAFETY_INVARIANTS.md) | The seven guarantees, and why each exists |
1041
+ | [Why it refuses](docs/WHY.md) | The argument the whole design came from |
1022
1042
  | [Architecture](docs/ARCHITECTURE.md) · [HLD](docs/architecture/HLD.md) · [LLD](docs/architecture/LLD.md) | How it is built |
1023
1043
  | [Background automation](docs/BACKGROUND_AUTOMATION.md) | Schedulers, hooks, chaining, and turning it all off |
1024
1044
  | [IDE & editor integration](docs/IDE_INTEGRATION.md) | The extension, schema IntelliSense, and every editor it works in |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dev-prune",
3
- "version": "1.10.0",
3
+ "version": "1.12.0",
4
4
  "description": "Universal, lockfile-safe workspace pruner. Reclaims disk space from idle Git repositories by deleting only dependency and build directories a lockfile can rebuild.",
5
5
  "bin": {
6
6
  "dev-prune": "./bin/dev-prune.js",
@@ -12,13 +12,13 @@
12
12
  "LICENSE.md"
13
13
  ],
14
14
  "optionalDependencies": {
15
- "dev-prune-darwin-arm64": "1.10.0",
16
- "dev-prune-darwin-x64": "1.10.0",
17
- "dev-prune-linux-arm64": "1.10.0",
18
- "dev-prune-linux-x64": "1.10.0",
19
- "dev-prune-windows-arm64": "1.10.0",
20
- "dev-prune-windows-x64": "1.10.0",
21
- "dev-prune-windows-x86": "1.10.0"
15
+ "dev-prune-darwin-arm64": "1.12.0",
16
+ "dev-prune-darwin-x64": "1.12.0",
17
+ "dev-prune-linux-arm64": "1.12.0",
18
+ "dev-prune-linux-x64": "1.12.0",
19
+ "dev-prune-windows-arm64": "1.12.0",
20
+ "dev-prune-windows-x64": "1.12.0",
21
+ "dev-prune-windows-x86": "1.12.0"
22
22
  },
23
23
  "engines": {
24
24
  "node": ">=20"