dev-prune 1.6.0 → 1.7.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 +92 -96
- package/package.json +8 -8
package/README.md
CHANGED
|
@@ -11,12 +11,7 @@ something a lockfile cannot put back.**
|
|
|
11
11
|
|
|
12
12
|
[](https://crates.io/crates/dev-prune) [](https://pypi.org/project/dev-prune/) [](LICENSE.md) [](https://www.rust-lang.org/) [](docs/RELEASES_AND_MANUAL_INSTALL.md)
|
|
13
13
|
|
|
14
|
-
[](https://github.com/Life-Experimentalist/dev-prune/actions/workflows/ci.yml) [](https://devprune.vkrishna04.me/)
|
|
15
|
-
|
|
16
|
-
<!-- The npm badge goes back in the row above the moment `dev-prune` is published to
|
|
17
|
-
npm; until then shields.io renders it as a red "not found", which is worse than
|
|
18
|
-
having no badge at all:
|
|
19
|
-
[](https://www.npmjs.com/package/dev-prune) -->
|
|
14
|
+
[](https://github.com/Life-Experimentalist/dev-prune/actions/workflows/ci.yml) [](https://devprune.vkrishna04.me/) [](https://www.npmjs.com/package/dev-prune)
|
|
20
15
|
|
|
21
16
|
[**Website**](https://devprune.vkrishna04.me/) · [**Documentation**](docs/README.md) · [**CLI reference**](docs/CLI_REFERENCE.md) · [**Safety invariants**](docs/SAFETY_INVARIANTS.md) · [**Changelog**](CHANGELOG.md)
|
|
22
17
|
|
|
@@ -420,48 +415,48 @@ process that leaves a dirty working tree is a surprise.
|
|
|
420
415
|
|
|
421
416
|
## Features
|
|
422
417
|
|
|
423
|
-
| What you get
|
|
424
|
-
| :-------------------------------------------- |
|
|
425
|
-
| 🔒 **Lockfile-gated deletion** | Nothing goes without a passing read-only verification against `package-lock.json`, `pnpm-lock.yaml`, `yarn.lock`, `bun.lock`, `uv.lock`, `requirements.txt`, `Cargo.lock` or `go.sum`
|
|
426
|
-
| 🧩 **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
|
|
427
|
-
| ↩️ **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
|
|
428
|
-
| 🕒 **Activity-aware** | Combines `git log` timestamps with source-file `mtime`, so uncommitted work protects a repository just as a commit does
|
|
429
|
-
| 📊 **Cache report** | `devp caches` sizes every package manager cache and store on the machine — npm to cargo to Maven, Gradle, NuGet, vcpkg, Conan, Composer, CocoaPods and Hex — and prints the command that clears each. The report is read-only; `devp caches clear <manager>` runs that command for you, after asking. Nothing on a schedule ever touches a cache
|
|
430
|
-
| 🩺 **`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
|
|
431
|
-
| 🤖 **Self-installing automation** | OS-native scheduler (Task Scheduler, LaunchAgent, systemd user timer) and non-blocking Git hooks, installed at install time and restored after an upgrade. `auto_setup`, `auto_hooks`, `auto_daemon` or `DEV_PRUNE_NO_AUTO_SETUP=1` turn it off
|
|
432
|
-
| ⚡ **0ms opt-out** | An `ignore.devprune.json` in a repository root is honoured by file presence alone — no read, no parse
|
|
433
|
-
| 🔌 **`--json` on every reporting command** | `run`, `status`, `stats`, `trust` and `caches` each emit one versioned document on stdout, diagnostics on stderr. Built for scripts and agents
|
|
434
|
-
| 🧠 **AI agent skill** | A token-lean `SKILL.md` embedded in the binary; `devp skill` exports it and prints onboarding prompts for Claude Code, Gemini Antigravity, Cursor, Windsurf, Copilot and OpenClaw
|
|
435
|
-
| 🧰 **Editor extension** | Validates `.devprune.json` as you type and shows the workspace's reclaimable size in the status bar. `devp setup` offers to install it — once, only at a terminal — into VS Code, VSCodium, Cursor, Windsurf, Positron or Kiro, each from its own registry with the release `.vsix` as fallback. [docs/IDE_INTEGRATION.md](docs/IDE_INTEGRATION.md)
|
|
436
|
-
| 🖼️ **File manager icons** | `devp icon` registers `*.devprune.json` with the OS file manager — a real `shared-mime-info` type plus hicolor icons on Linux, a folder icon on Windows. It never edits your editor settings, `PATH` or shell startup files
|
|
437
|
-
| 🌏 **Unicode-safe paths** | A repository at `ワークスペース/项目目录名称测试/프론트엔드` scans, verifies, prunes and restores exactly like an ASCII one, on all three platforms. Terminal tables are padded by display *column*, not by character, so full-width CJK names keep `devp status` and `devp doctor` aligned. Accented Latin, Cyrillic, Arabic and emoji directory names too
|
|
438
|
-
| 🚫 **No telemetry** | One optional unauthenticated `GET` to GitHub's public releases endpoint, at most weekly, no body and no identifier. Nothing else leaves the machine
|
|
418
|
+
| What you get | What it means in practice |
|
|
419
|
+
| :-------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
420
|
+
| 🔒 **Lockfile-gated deletion** | Nothing goes without a passing read-only verification against `package-lock.json`, `pnpm-lock.yaml`, `yarn.lock`, `bun.lock`, `uv.lock`, `requirements.txt`, `Cargo.lock` or `go.sum` |
|
|
421
|
+
| 🧩 **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 |
|
|
422
|
+
| ↩️ **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 |
|
|
423
|
+
| 🕒 **Activity-aware** | Combines `git log` timestamps with source-file `mtime`, so uncommitted work protects a repository just as a commit does |
|
|
424
|
+
| 📊 **Cache report** | `devp caches` sizes every package manager cache and store on the machine — npm to cargo to Maven, Gradle, NuGet, vcpkg, Conan, Composer, CocoaPods and Hex — and prints the command that clears each. The report is read-only; `devp caches clear <manager>` runs that command for you, after asking. Nothing on a schedule ever touches a cache |
|
|
425
|
+
| 🩺 **`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 |
|
|
426
|
+
| 🤖 **Self-installing automation** | OS-native scheduler (Task Scheduler, LaunchAgent, systemd user timer) and non-blocking Git hooks, installed at install time and restored after an upgrade. `auto_setup`, `auto_hooks`, `auto_daemon` or `DEV_PRUNE_NO_AUTO_SETUP=1` turn it off |
|
|
427
|
+
| ⚡ **0ms opt-out** | An `ignore.devprune.json` in a repository root is honoured by file presence alone — no read, no parse |
|
|
428
|
+
| 🔌 **`--json` on every reporting command** | `run`, `status`, `stats`, `trust` and `caches` each emit one versioned document on stdout, diagnostics on stderr. Built for scripts and agents |
|
|
429
|
+
| 🧠 **AI agent skill** | A token-lean `SKILL.md` embedded in the binary; `devp skill` exports it and prints onboarding prompts for Claude Code, Gemini Antigravity, Cursor, Windsurf, Copilot and OpenClaw |
|
|
430
|
+
| 🧰 **Editor extension** | Validates `.devprune.json` as you type and shows the workspace's reclaimable size in the status bar. `devp setup` offers to install it — once, only at a terminal — into VS Code, VSCodium, Cursor, Windsurf, Positron or Kiro, each from its own registry with the release `.vsix` as fallback. [docs/IDE_INTEGRATION.md](docs/IDE_INTEGRATION.md) |
|
|
431
|
+
| 🖼️ **File manager icons** | `devp icon` registers `*.devprune.json` with the OS file manager — a real `shared-mime-info` type plus hicolor icons on Linux, a folder icon on Windows. It never edits your editor settings, `PATH` or shell startup files |
|
|
432
|
+
| 🌏 **Unicode-safe paths** | A repository at `ワークスペース/项目目录名称测试/프론트엔드` scans, verifies, prunes and restores exactly like an ASCII one, on all three platforms. Terminal tables are padded by display *column*, not by character, so full-width CJK names keep `devp status` and `devp doctor` aligned. Accented Latin, Cyrillic, Arabic and emoji directory names too |
|
|
433
|
+
| 🚫 **No telemetry** | One optional unauthenticated `GET` to GitHub's public releases endpoint, at most weekly, no body and no identifier. Nothing else leaves the machine |
|
|
439
434
|
|
|
440
435
|
---
|
|
441
436
|
|
|
442
437
|
## Commands
|
|
443
438
|
|
|
444
|
-
| Command | Also | What it does
|
|
445
|
-
| :--------------------- | :------------------------------------------------------------------ |
|
|
446
|
-
| `devp init [PATHS]` | `scan`, `onboard` | Crawls directory trees for Git repositories and registers them, then runs the `setup` integration pass
|
|
447
|
-
| `devp link [PATH]` | | Registers one repository
|
|
448
|
-
| `devp unlink [PATH]` | `--missing` | Unregisters one; `--missing` drops every entry whose directory is gone, in one pass
|
|
449
|
-
| `devp undo` | | Reverts the most recent `init` or `link`
|
|
450
|
-
| `devp run [PATH]` | `--dry-run`, `--only`, `--skip`, `--except`, `--min-size`, `--json` | Prunes every registered repository, or one target
|
|
451
|
-
| `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
|
|
452
|
-
| `devp stats` | `--json` | What has already been reclaimed: lifetime total, prune passes, the last pass, and the biggest contributors
|
|
453
|
-
| `devp completions` | `bash`, `zsh`, `fish`, `powershell`, `elvish` | Prints a shell completion script to stdout, generated from the same argument definitions the binary parses with
|
|
454
|
-
| `devp caches` | `clear <manager\|all>`, `--json`
|
|
455
|
-
| `devp trust` | `--json` | What dev-prune may do on this machine: the guarantees the code enforces, then the scheduler, hooks and settings read live. Read-only
|
|
456
|
-
| `devp restore [PATH]` | `--last-run` | Reinstalls dependencies for every project in a tree; `--last-run` undoes the last prune pass
|
|
457
|
-
| `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
|
|
458
|
-
| `devp config [ACTION]` | `get`, `set`, `show`, `wizard`, `project`, `daemon`, `hook`, `icon` | Global settings, per-repository `.devprune.json`, scheduler, Git hooks, file manager icons
|
|
459
|
-
| `devp setup` | `--status` | Installs any missing integration; `--status` only reports
|
|
460
|
-
| `devp update` | `--offline`, `--install` | Prints the installed version, checks GitHub for a newer release, shows the upgrade command for your install channel; `--install` runs that upgrade through the channel that owns this copy
|
|
461
|
-
| `devp skill` | `--agent <editor>` | Exports `SKILL.md` and prints AI agent onboarding prompts; `--agent` writes per-repository rules for 15 editors — Cursor, Windsurf, Antigravity, Cline, Roo, Kilo Code, Continue, Amazon Q, Kiro, Trae, Junie, Gemini CLI, Zed, Copilot or `AGENTS.md`
|
|
462
|
-
| `devp man` | `--dir <dir>` | The manual as man pages, generated from the same argument definitions `--help` prints; alone it emits `devp(1)` to stdout, `--dir` writes the full set
|
|
463
|
-
| `devp uninstall` | `--deep` | Removes the scheduler, hooks, both binaries and every other installed copy it can find on the machine; `--deep` also clears configuration
|
|
464
|
-
| `devp -V` | | Version plus an environment audit: OS, architecture, config path, PATH activation
|
|
439
|
+
| Command | Also | What it does |
|
|
440
|
+
| :--------------------- | :------------------------------------------------------------------ | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
441
|
+
| `devp init [PATHS]` | `scan`, `onboard` | Crawls directory trees for Git repositories and registers them, then runs the `setup` integration pass |
|
|
442
|
+
| `devp link [PATH]` | | Registers one repository |
|
|
443
|
+
| `devp unlink [PATH]` | `--missing` | Unregisters one; `--missing` drops every entry whose directory is gone, in one pass |
|
|
444
|
+
| `devp undo` | | Reverts the most recent `init` or `link` |
|
|
445
|
+
| `devp run [PATH]` | `--dry-run`, `--only`, `--skip`, `--except`, `--min-size`, `--json` | Prunes every registered repository, or one target |
|
|
446
|
+
| `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 |
|
|
447
|
+
| `devp stats` | `--json` | What has already been reclaimed: lifetime total, prune passes, the last pass, and the biggest contributors |
|
|
448
|
+
| `devp completions` | `bash`, `zsh`, `fish`, `powershell`, `elvish` | Prints a shell completion script to stdout, generated from the same argument definitions the binary parses with |
|
|
449
|
+
| `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 |
|
|
450
|
+
| `devp trust` | `--json` | What dev-prune may do on this machine: the guarantees the code enforces, then the scheduler, hooks and settings read live. Read-only |
|
|
451
|
+
| `devp restore [PATH]` | `--last-run` | Reinstalls dependencies for every project in a tree; `--last-run` undoes the last prune pass |
|
|
452
|
+
| `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 |
|
|
453
|
+
| `devp config [ACTION]` | `get`, `set`, `show`, `wizard`, `project`, `daemon`, `hook`, `icon` | Global settings, per-repository `.devprune.json`, scheduler, Git hooks, file manager icons |
|
|
454
|
+
| `devp setup` | `--status` | Installs any missing integration; `--status` only reports |
|
|
455
|
+
| `devp update` | `--offline`, `--install` | Prints the installed version, checks GitHub for a newer release, shows the upgrade command for your install channel; `--install` runs that upgrade through the channel that owns this copy |
|
|
456
|
+
| `devp skill` | `--agent <editor>` | Exports `SKILL.md` and prints AI agent onboarding prompts; `--agent` writes per-repository rules for 15 editors — Cursor, Windsurf, Antigravity, Cline, Roo, Kilo Code, Continue, Amazon Q, Kiro, Trae, Junie, Gemini CLI, Zed, Copilot or `AGENTS.md` |
|
|
457
|
+
| `devp man` | `--dir <dir>` | The manual as man pages, generated from the same argument definitions `--help` prints; alone it emits `devp(1)` to stdout, `--dir` writes the full set |
|
|
458
|
+
| `devp uninstall` | `--deep` | Removes the scheduler, hooks, both binaries and every other installed copy it can find on the machine; `--deep` also clears configuration |
|
|
459
|
+
| `devp -V` | | Version plus an environment audit: OS, architecture, config path, PATH activation |
|
|
465
460
|
|
|
466
461
|
`devp hook`, `devp daemon` and `devp icon` are shorthands for the `config` subcommands of
|
|
467
462
|
the same name, and `install` / `uninstall` / `on` / `off` work wherever `enable` /
|
|
@@ -481,36 +476,37 @@ list, every setting and the `--json` schema: **[docs/CLI_REFERENCE.md](docs/CLI_
|
|
|
481
476
|
|
|
482
477
|
Adapters detect the project, verify the lockfile, and own the bloat directories:
|
|
483
478
|
|
|
484
|
-
| Ecosystem
|
|
485
|
-
|
|
|
486
|
-
| **npm**
|
|
487
|
-
| **pnpm**
|
|
488
|
-
| **Yarn**
|
|
489
|
-
| **Bun**
|
|
490
|
-
| **uv** (Python)
|
|
491
|
-
| **Poetry** (Python)
|
|
492
|
-
| **PDM** (Python)
|
|
493
|
-
| **Pipenv** (Python)
|
|
494
|
-
| **venv** (Python)
|
|
495
|
-
| **Cargo** (Rust) *(opt-in)*
|
|
496
|
-
| **Go**
|
|
497
|
-
| **Composer** (PHP)
|
|
498
|
-
| **Bundler** (Ruby)
|
|
499
|
-
| **CocoaPods** (Apple)
|
|
500
|
-
| **Mix** (Elixir)
|
|
501
|
-
| **Terraform**
|
|
502
|
-
| **Gradle** *(opt-in)*
|
|
503
|
-
| **Maven** *(opt-in)*
|
|
504
|
-
| **SwiftPM** *(opt-in)*
|
|
505
|
-
| **Dart / Flutter** *(opt-in)* | `pubspec.yaml`
|
|
479
|
+
| Ecosystem | Detected by | Bloat | Verification (read-only) | Restore |
|
|
480
|
+
| :---------------------------- | :------------------------------------------------------------ | :----------------------------------------- | :---------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------- |
|
|
481
|
+
| **npm** | `package-lock.json` | `node_modules` | `npm ci --dry-run --ignore-scripts` | `npm ci` |
|
|
482
|
+
| **pnpm** | `pnpm-lock.yaml` | `node_modules` | `pnpm install --lockfile-only --frozen-lockfile` | `pnpm install --frozen-lockfile` |
|
|
483
|
+
| **Yarn** | `yarn.lock` | `node_modules` | `yarn install --immutable --mode update-lockfile` (Berry); on Classic an existing `yarn.lock` is itself the proof | `yarn install --immutable` |
|
|
484
|
+
| **Bun** | `bun.lockb`, `bun.lock` | `node_modules` | `bun install --frozen-lockfile --dry-run --ignore-scripts` | `bun install --frozen-lockfile` |
|
|
485
|
+
| **uv** (Python) | `uv.lock`, `[tool.uv]` in `pyproject.toml` | `.venv` | `uv lock --locked` | `uv sync` |
|
|
486
|
+
| **Poetry** (Python) | `poetry.lock`, `[tool.poetry]` in `pyproject.toml` | `.venv` | `poetry check --lock`, plus no installed package the lockfile never recorded | `poetry install` |
|
|
487
|
+
| **PDM** (Python) | `pdm.lock`, `[tool.pdm]` or `pdm.backend` in `pyproject.toml` | `.venv`, `__pypackages__` | `pdm lock --check` | `pdm install` |
|
|
488
|
+
| **Pipenv** (Python) | `Pipfile` | `.venv` *(in-project installs only)* | `pipenv verify` | `pipenv install --deploy` |
|
|
489
|
+
| **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` |
|
|
490
|
+
| **Cargo** (Rust) *(opt-in)* | `Cargo.toml` | `target` | `cargo metadata --locked` | *(rebuilt by the next `cargo build`)* |
|
|
491
|
+
| **Go** | `go.mod` | `vendor` | `go mod download` | `go mod vendor` |
|
|
492
|
+
| **Composer** (PHP) | `composer.json` | `vendor` | `composer validate --no-check-publish --no-check-all` | `composer install` |
|
|
493
|
+
| **Bundler** (Ruby) | `Gemfile` | `vendor/bundle` *(vendored installs only)* | `bundle lock --check` | `bundle install` |
|
|
494
|
+
| **CocoaPods** (Apple) | `Podfile` | `Pods` | `Podfile.lock` carries its `SPEC CHECKSUMS` section and is no older than the `Podfile` | `pod install` |
|
|
495
|
+
| **Mix** (Elixir) | `mix.exs` | `deps` | `mix.lock` is a complete Elixir map and no older than `mix.exs` | `mix deps.get` |
|
|
496
|
+
| **Terraform** | any `*.tf` / `*.tf.json` | `.terraform/providers` | `.terraform.lock.hcl` records at least one provider | `terraform init -backend=false` |
|
|
497
|
+
| **Gradle** *(opt-in)* | `build.gradle[.kts]`, `settings.gradle[.kts]` | `build`, `.gradle` | manifest present and readable — the rebuild-from-source proof | *(rebuilt by the next `./gradlew build`)* |
|
|
498
|
+
| **Maven** *(opt-in)* | `pom.xml` | `target` | `pom.xml` parses as a Maven manifest | *(rebuilt by the next `mvn package`)* |
|
|
499
|
+
| **SwiftPM** *(opt-in)* | `Package.swift` | `.build` | `Package.swift` declares a `Package(` — the rebuild-from-source proof | *(rebuilt by the next `swift build`)* |
|
|
500
|
+
| **Dart / Flutter** *(opt-in)* | `pubspec.yaml` | `.dart_tool` | `pubspec.lock` has a `packages:` section and is no older than `pubspec.yaml` | `dart pub get` / `flutter pub get` |
|
|
501
|
+
| **Mix `_build/`** *(opt-in)* | `mix.exs` | `_build` | `mix.exs` and `mix.lock` both present — the rebuild-from-source proof | *(rebuilt by the next `mix compile`)* |
|
|
506
502
|
|
|
507
503
|
A required binary that is missing is a reason to skip, never a reason to delete: if `npm`
|
|
508
504
|
is not on `PATH`, the `node_modules` it owns is left exactly where it is.
|
|
509
505
|
|
|
510
|
-
The
|
|
506
|
+
The six build-tool adapters ship **disabled**, because a build tree is regenerated
|
|
511
507
|
by recompiling, not downloading — it costs more to get back. `devp config set
|
|
512
508
|
enable_cargo true` / `enable_gradle true` / `enable_maven true` / `enable_swift true` /
|
|
513
|
-
`enable_dart true` switches them on, and their candidates wait for `build_idle_days` (45 by default),
|
|
509
|
+
`enable_dart true` / `enable_mix_build true` switches them on, and their candidates wait for `build_idle_days` (45 by default),
|
|
514
510
|
applied as the *maximum* of it and `idle_days` — the build-tool gate only ever makes
|
|
515
511
|
pruning later, never earlier.
|
|
516
512
|
|
|
@@ -591,22 +587,22 @@ Global settings live in `%APPDATA%\dev-prune` (Windows),
|
|
|
591
587
|
once on a first install — so the defaults are something you agreed to rather than
|
|
592
588
|
inherited — and again after an upgrade adds a setting you have never been shown.
|
|
593
589
|
|
|
594
|
-
| Key
|
|
595
|
-
|
|
|
596
|
-
| `idle_days`
|
|
597
|
-
| `min_size_mb`
|
|
598
|
-
| `scan_depth`
|
|
599
|
-
| `require_confirmation`
|
|
600
|
-
| `allow_manifest_rewrite`
|
|
601
|
-
| `command_timeout_secs`
|
|
602
|
-
| `auto_setup` · `auto_daemon` · `auto_hooks`
|
|
603
|
-
| `auto_hooks_chain`
|
|
604
|
-
| `check_interval_days`
|
|
605
|
-
| `update_check`
|
|
606
|
-
| `update_check_interval_days` · `update_check_timeout_secs`
|
|
607
|
-
| `enable_cargo` · `enable_gradle` · `enable_maven` · `enable_swift` · `enable_dart` | `false` | Turn on an opt-in build-tool adapter; `build_idle_days` (`45`) gates all
|
|
608
|
-
| `adapter_idle_days`
|
|
609
|
-
| `disabled_adapters`
|
|
590
|
+
| Key | Default | Meaning |
|
|
591
|
+
| :--------------------------------------------------------------------------------- | :-------: | :---------------------------------------------------------------------------------- |
|
|
592
|
+
| `idle_days` | `15` | How long a repository must be untouched to become a candidate |
|
|
593
|
+
| `min_size_mb` | `0` | Smallest bloat directory worth deleting; `0` disables the floor |
|
|
594
|
+
| `scan_depth` | `6` | Levels below a repository root that discovery descends |
|
|
595
|
+
| `require_confirmation` | `true` | Whether a pass asks before deleting |
|
|
596
|
+
| `allow_manifest_rewrite` | `false` | Whether verification may *repair* a drifted lockfile instead of refusing |
|
|
597
|
+
| `command_timeout_secs` | `600` | Ceiling on any one package manager command |
|
|
598
|
+
| `auto_setup` · `auto_daemon` · `auto_hooks` | `true` | Whether the integration pass may run unattended, and what it may install |
|
|
599
|
+
| `auto_hooks_chain` | `false` | Whether it may take a `core.hooksPath` another tool holds, forwarding every hook on |
|
|
600
|
+
| `check_interval_days` | `2` | How often the OS scheduler runs a pass |
|
|
601
|
+
| `update_check` | `true` | Whether the periodic release check runs |
|
|
602
|
+
| `update_check_interval_days` · `update_check_timeout_secs` | `7` · `5` | Minimum gap between checks, and how long one may hang |
|
|
603
|
+
| `enable_cargo` · `enable_gradle` · `enable_maven` · `enable_swift` · `enable_dart` · `enable_mix_build` | `false` | Turn on an opt-in build-tool adapter; `build_idle_days` (`45`) gates all six |
|
|
604
|
+
| `adapter_idle_days` | *(none)* | Per-adapter idle floors, as `cargo=90,npm=30` — each raises only its own window |
|
|
605
|
+
| `disabled_adapters` | *(none)* | Adapters to leave alone entirely, by name — as if that ecosystem were not installed |
|
|
610
606
|
|
|
611
607
|
Three of them — `idle_days` (as `override_idle_days`), `min_size_mb` and `scan_depth` —
|
|
612
608
|
also take a per-repository form in that project's `.devprune.json`, where they win for
|
|
@@ -715,20 +711,20 @@ Deeper: [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) ·
|
|
|
715
711
|
|
|
716
712
|
## Documentation
|
|
717
713
|
|
|
718
|
-
| |
|
|
719
|
-
| :------------------------------------------------------------------------------------------------------- |
|
|
720
|
-
| [Documentation hub](docs/README.md) | Index of everything below
|
|
721
|
-
| [CLI reference](docs/CLI_REFERENCE.md) | Every command, flag, setting, exit code and `--json` document
|
|
722
|
-
| [Safety invariants](docs/SAFETY_INVARIANTS.md) | The seven guarantees, and why each exists
|
|
723
|
-
| [Architecture](docs/ARCHITECTURE.md) · [HLD](docs/architecture/HLD.md) · [LLD](docs/architecture/LLD.md) | How it is built
|
|
724
|
-
| [Background automation](docs/BACKGROUND_AUTOMATION.md) | Schedulers, hooks, chaining, and turning it all off
|
|
714
|
+
| | |
|
|
715
|
+
| :------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------- |
|
|
716
|
+
| [Documentation hub](docs/README.md) | Index of everything below |
|
|
717
|
+
| [CLI reference](docs/CLI_REFERENCE.md) | Every command, flag, setting, exit code and `--json` document |
|
|
718
|
+
| [Safety invariants](docs/SAFETY_INVARIANTS.md) | The seven guarantees, and why each exists |
|
|
719
|
+
| [Architecture](docs/ARCHITECTURE.md) · [HLD](docs/architecture/HLD.md) · [LLD](docs/architecture/LLD.md) | How it is built |
|
|
720
|
+
| [Background automation](docs/BACKGROUND_AUTOMATION.md) | Schedulers, hooks, chaining, and turning it all off |
|
|
725
721
|
| [IDE & editor integration](docs/IDE_INTEGRATION.md) | The extension, schema IntelliSense, and every editor it works in |
|
|
726
|
-
| [Adding an adapter](docs/ADDING_ADAPTERS.md) | End-to-end tutorial for a new ecosystem
|
|
727
|
-
| [Releases & manual install](docs/RELEASES_AND_MANUAL_INSTALL.md) · [Distribution](docs/DISTRIBUTION.md) | Every install channel, and building from source
|
|
728
|
-
| [Troubleshooting](docs/troubleshooting/README.md) | Symptom-first, with the fix for each
|
|
729
|
-
| [Privacy](docs/PRIVACY.md) | The one network request, in full
|
|
730
|
-
| [Market analysis](docs/MARKET_ANALYSIS.md) | Where this sits among the alternatives
|
|
731
|
-
| [Contributing](CONTRIBUTING.md) · [Security policy](SECURITY.md) · [Changelog](CHANGELOG.md) |
|
|
722
|
+
| [Adding an adapter](docs/ADDING_ADAPTERS.md) | End-to-end tutorial for a new ecosystem |
|
|
723
|
+
| [Releases & manual install](docs/RELEASES_AND_MANUAL_INSTALL.md) · [Distribution](docs/DISTRIBUTION.md) | Every install channel, and building from source |
|
|
724
|
+
| [Troubleshooting](docs/troubleshooting/README.md) | Symptom-first, with the fix for each |
|
|
725
|
+
| [Privacy](docs/PRIVACY.md) | The one network request, in full |
|
|
726
|
+
| [Market analysis](docs/MARKET_ANALYSIS.md) | Where this sits among the alternatives |
|
|
727
|
+
| [Contributing](CONTRIBUTING.md) · [Security policy](SECURITY.md) · [Changelog](CHANGELOG.md) | |
|
|
732
728
|
|
|
733
729
|
---
|
|
734
730
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dev-prune",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.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.
|
|
16
|
-
"dev-prune-darwin-x64": "1.
|
|
17
|
-
"dev-prune-linux-arm64": "1.
|
|
18
|
-
"dev-prune-linux-x64": "1.
|
|
19
|
-
"dev-prune-win32-arm64": "1.
|
|
20
|
-
"dev-prune-win32-ia32": "1.
|
|
21
|
-
"dev-prune-win32-x64": "1.
|
|
15
|
+
"dev-prune-darwin-arm64": "1.7.0",
|
|
16
|
+
"dev-prune-darwin-x64": "1.7.0",
|
|
17
|
+
"dev-prune-linux-arm64": "1.7.0",
|
|
18
|
+
"dev-prune-linux-x64": "1.7.0",
|
|
19
|
+
"dev-prune-win32-arm64": "1.7.0",
|
|
20
|
+
"dev-prune-win32-ia32": "1.7.0",
|
|
21
|
+
"dev-prune-win32-x64": "1.7.0"
|
|
22
22
|
},
|
|
23
23
|
"engines": {
|
|
24
24
|
"node": ">=20"
|