{"_id":"@bvelji/repoclean","_rev":"2-c48ffc512225f726507a2830d32a2967","name":"@bvelji/repoclean","dist-tags":{"latest":"1.0.3"},"versions":{"1.0.0":{"name":"@bvelji/repoclean","version":"1.0.0","_id":"@bvelji/repoclean@1.0.0","maintainers":[{"name":"bvelji","email":"bvelji@gmail.com"}],"bin":{"repoclean":"dist/index.js"},"dist":{"shasum":"c1c6d8fe22b03afef5a1452c4da895667710e41b","tarball":"https://registry.npmjs.org/@bvelji/repoclean/-/repoclean-1.0.0.tgz","fileCount":11,"integrity":"sha512-ElsyqsyJm+vTE3syJIFmJWavsMUVycnIYCKewJxNq8CbW8oZpvHSBiZtEmUTMUpmJbITUumYR3U8vu3Ff1C2zQ==","signatures":[{"sig":"MEUCIQC6qk4/iq1rt4+SogpLLuG85NoFYdLG8BtyofQfJ7lEZwIgPmExKe+jQ5m/cFxU/h0a3Vep0fJKWGcBDqjXwreV1sc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23940},"type":"module","gitHead":"1da7adae879bba41d2b8a3a54fa978073b439c4b","scripts":{"build":"tsc","start":"tsx src/index.tsx","prepublishOnly":"npm run build"},"_npmUser":{"name":"bvelji","email":"bvelji@gmail.com"},"_npmVersion":"10.9.4","description":"TUI for cleaning up dev artifacts across your repos","directories":{},"_nodeVersion":"22.22.1","dependencies":{"ink":"^6.8.0","react":"^19.0.0","ink-spinner":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","typescript":"^5.7.0","@types/node":"^22.0.0","@types/react":"^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/repoclean_1.0.0_1774397272157_0.5219582416738973","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@bvelji/repoclean","version":"1.0.3","description":"TUI for cleaning up dev artifacts across your repos","license":"MIT","repository":{"type":"git","url":"git+https://github.com/bvelji/repoclean.git"},"type":"module","bin":{"repoclean":"dist/index.js"},"scripts":{"build":"tsc","prepublishOnly":"npm run build","release":"bash scripts/release.sh","start":"tsx src/index.tsx"},"dependencies":{"ink":"^6.8.0","ink-spinner":"^5.0.0","react":"^19.0.0"},"devDependencies":{"@types/node":"^22.0.0","@types/react":"^19.0.0","tsx":"^4.19.2","typescript":"^5.7.0"},"gitHead":"1da78d27c8582650f92ea6d5b4549725168191e3","_id":"@bvelji/repoclean@1.0.3","bugs":{"url":"https://github.com/bvelji/repoclean/issues"},"homepage":"https://github.com/bvelji/repoclean#readme","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-hCwOscPL1IVCfl+u6mhtw1clVTo2TlIhqkitFtE50zIOf5+Vbdt8tGy4YZXIGGBhKOnXFDBUMXKHf/Ozyxu9hw==","shasum":"5fde41d9ccb6de29793ca261ad077fb20c34d50f","tarball":"https://registry.npmjs.org/@bvelji/repoclean/-/repoclean-1.0.3.tgz","fileCount":12,"unpackedSize":25175,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@bvelji%2frepoclean@1.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDKGGHL+WM07AgNxqGy52pGw3bXfBIFR1NvYDMEY0M4pQIgWQeVc9RKKrIiDSwUCVylLBpEA8N+yLPnk28vPbjmloY="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:306c7d78-e07a-44fe-9efc-4a7d38d89c87"}},"directories":{},"maintainers":[{"name":"bvelji","email":"bvelji@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/repoclean_1.0.3_1774402423557_0.34794227098748665"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-25T00:07:52.040Z","modified":"2026-03-25T01:33:44.028Z","1.0.0":"2026-03-25T00:07:52.316Z","1.0.3":"2026-03-25T01:33:43.708Z"},"description":"TUI for cleaning up dev artifacts across your repos","maintainers":[{"name":"bvelji","email":"bvelji@gmail.com"}],"readme":"# repoclean\n\nAn interactive terminal UI for reclaiming disk space between development sessions. Scans your repos directory for regenerable build artifacts and dependency directories, lets you select what to remove, and shows you exactly what will be deleted before anything is touched.\n\n![repoclean TUI](assets/screenshot.gif)\n\n## What it scans\n\n| Directory | Condition |\n|-----------|-----------|\n| `node_modules/` | Any depth |\n| `.next/`, `dist/`, `build/`, `.cache/` | Only when a `package.json` sibling exists |\n| `packages/` | Only when a `.csproj` sibling exists (NuGet) |\n| `.docker/` | Only at project-root level |\n\n## Usage\n\n```bash\n# Scan the default directory (~/Repos)\nnpm start\n\n# Scan a custom directory\nnpm start -- /path/to/projects\nnpm start -- ~/work/clients\n```\n\nWhen installed globally:\n\n```bash\nrepoclean                        # defaults to ~/Repos\nrepoclean /path/to/projects      # custom directory\n```\n\n### Keyboard shortcuts\n\n| Key | Action |\n|-----|--------|\n| `↑` / `↓` | Navigate |\n| `Space` | Select / deselect item |\n| `a` | Select all / deselect all (respects active filter) |\n| `/` | Filter by path or type |\n| `Esc` | Clear filter |\n| `s` | Cycle sort order (size ↓ → size ↑ → name A→Z → name Z→A) |\n| `d` | Open deletion confirmation (only active when items are selected) |\n| `y` | Confirm deletion |\n| `n` / `Esc` | Cancel deletion, return to list |\n| `r` | Return to list after deletion |\n| `q` | Quit |\n\n### How scanning works\n\nScanning is non-blocking and fully animated throughout:\n\n1. **Walk** — async directory traversal; spinner shows the top-level directory currently being entered (e.g. `/Users/brian/Projects`). Subdirectories are never shown — only the immediate children of the root.\n2. **Size** — up to 4 concurrent `du` calls run in parallel; the header shows a live `sizing X/Y` counter as results stream in and items appear in the list.\n\n### Deletion flow\n\nCleanupTUI never deletes anything without explicit confirmation:\n\n1. **Select** — mark directories you want to remove\n2. **Review** — full-screen confirmation lists every path and total size\n3. **Delete** — press `y` to proceed; progress bar and current path shown per item\n4. **Summary** — see what was freed; return to list for another pass or quit\n\n## Requirements\n\n- Node.js 18+\n- npm\n\n## Installation\n\n```bash\ngit clone https://github.com/brianvelji/repoclean\ncd repoclean\nnpm install\nnpm start\n```\n\nTo run from anywhere, install globally:\n\n```bash\nnpm install -g .\nrepoclean                   # ~/Repos\nrepoclean ~/work/clients    # custom directory\n```\n\n## Stack\n\n- [Ink](https://github.com/vadimdemedes/ink) — React for CLIs\n- [ink-spinner](https://github.com/vadimdemedes/ink-spinner) — terminal spinner\n- [tsx](https://github.com/privatenumber/tsx) — TypeScript runner\n","readmeFilename":"README.md","homepage":"https://github.com/bvelji/repoclean#readme","repository":{"type":"git","url":"git+https://github.com/bvelji/repoclean.git"},"bugs":{"url":"https://github.com/bvelji/repoclean/issues"},"license":"MIT"}