juliensimon/cache-commander
GitHub: juliensimon/cache-commander
一个用于探索、审计和清理开发者缓存目录的终端 UI 工具,支持 CVE 扫描和过时包检测。
Stars: 32 | Forks: 2
# ccmd — 缓存管理器
[](https://github.com/juliensimon/cache-commander/actions/workflows/ci.yml)
[](https://github.com/juliensimon/cache-commander/releases)
[](https://github.com/juliensimon/cache-commander/releases)
[](LICENSE)
[](https://www.rust-lang.org)
[](https://github.com/juliensimon/cache-commander/releases)
[](https://github.com/juliensimon/cache-commander/releases)
[](https://crates.io/crates/ccmd)
[](https://github.com/juliensimon/homebrew-tap)
一个用于在 macOS 和 Linux 上探索、审计和清理开发者缓存目录的终端 UI (TUI)。扫描缓存包以发现已知 CVE、查找过时依赖项并回收磁盘空间 — 全部在一个工具中完成。
开发者机器积累了数十 GB 的隐形缓存数据 — ML 模型、包存档、构建产物、下载的 bottles。`ccmd` 让这一切变得可见、可扫描漏洞、可安全删除。

## 特性
- **ML 模型**(HuggingFace、PyTorch、Whisper)— 数十 GB 你已忘记的数据
- **包缓存**(pip、uv、npm、Cargo、Homebrew)— 存在已知 CVE 的旧版本
- **npm 供应链风险** — 隐藏在 npx 缓存中的带有安装脚本的传递依赖
- **构建产物**(pre-commit 钩子、Prisma 引擎)— 过时可重新下载
`ccmd` 为您提供跨所有缓存的单一视图,并内置安全扫描功能。
## 安装
### Homebrew(macOS 和 Linux)
```
brew tap juliensimon/tap
brew install ccmd
```
### 从 crates.io 安装
```
cargo install ccmd
```
### 使用 cargo-binstall(预构建,无需编译)
```
cargo binstall ccmd
```
### 从源码构建
```
git clone https://github.com/juliensimon/cache-commander
cd cache-commander
cargo build --release
./target/release/ccmd
```
### 预构建二进制文件
从 [GitHub Releases](https://github.com/juliensimon/cache-commander/releases) 下载 — 支持 macOS(x86_64、Apple Silicon)和 Linux(x86_64、aarch64)。
## 快速开始
```
ccmd # browse all default cache locations
ccmd --vulncheck # scan for CVEs on startup
ccmd --versioncheck # check for outdated packages on startup
ccmd --root ~/.cache/huggingface # scan a specific directory
```
## 功能
### 浏览和了解
- **双面板 TUI** — 左侧为可导航树,右侧为详情
- **12 个缓存提供者** — 使用语义名称而非哈希目录
- **安全级别** — 绿色(可安全删除)、黄色(可能导致重新构建)、红色(包含状态)
- **排序** — 按大小、名称或最后修改时间排序
- **搜索** — 使用 `/` 进行大小写不敏感的树形过滤
### 安全扫描
- **漏洞扫描** — 查询 [OSV.dev](https://osv.dev) 以发现缓存包中的已知 CVE
- **版本检查** — 将缓存版本与 PyPI、crates.io 和 npm 注册表进行比较
- **修复版本** — 显示解决每个 CVE 的版本,并提供升级命令
- **npm 供应链** — 扫描 npx 缓存中的传递依赖,标记带有安装脚本的包
- **按状态过滤** — 调暗无漏洞的项目以聚焦重要内容
- **复制升级命令** — 按 `c` 将 `pip install pkg>=version` 复制到剪贴板
### 清理
- **标记和删除** — 空格键标记,`d` 键确认后删除
- **批量标记** — `m` 键在过滤后标记所有可见(非调暗)项目
- **工作流程**:扫描 (`V`) → 过滤 (`f`) → 全部标记 (`m`) → 删除 (`d`)
## 支持的缓存
| 提供者 | 位置 | 语义名称 |
|----------|----------|----------------|
| HuggingFace | `~/.cache/huggingface` | 模型/数据集名称、版本 |
| pip | `~/.cache/pip` | Wheel 包 |
| uv | `~/.cache/uv` | 通过 dist-info 获取包名称 |
| npm | `~/.npm` | npx 包 + 传递的 node_modules 依赖 |
| Homebrew | `~/Library/Caches/Homebrew` | Bottles、casks |
| Cargo | `~/.cargo/registry` | Crate 名称和版本 |
| pre-commit | `~/.cache/pre-commit` | 钩子仓库名称 |
| Whisper | `~/.cache/whisper` | 模型名称(Large v3、Tiny 等)|
| GitHub CLI | `~/.cache/gh` | 工作流运行日志 |
| PyTorch | `~/.cache/torch` | 模型检查点 |
| Chroma | `~/.cache/chroma` | Embedding 模型 |
| Prisma | `~/.cache/prisma` | 引擎版本 |
## 快捷键
### 导航
| 按键 | 操作 |
|-----|--------|
| `↑`/`k` `↓`/`j` | 上移 / 下移 |
| `→`/`l` `←`/`h` | 展开 / 折叠(或返回父级)|
| `Enter` | 切换展开 |
| `g` / `G` | 跳转到顶部 / 底部 |
| `/` | 搜索 — 输入以过滤,回车保持,Esc 清除 |
### 安全
| 按键 | 操作 |
|-----|--------|
| `v` / `V` | 扫描选中项 / 全部的 CVE |
| `o` / `O` | 检查选中项 / 全部的过时版本 |
| `f` | 循环状态过滤:无 → 有漏洞 → 过时 → 两者 |
| `c` | 复制升级命令到剪贴板 |
### 标记和删除
| 按键 | 操作 |
|-----|--------|
| `Space` | 标记 / 取消标记项目 |
| `m` | 标记所有可见项目(需确认)|
| `u` | 取消全部标记 |
| `d` / `D` | 删除已标记的项目 |
### 其他
| 按键 | 操作 |
|-----|--------|
| `s` | 循环排序(大小 → 名称 → 修改时间)|
| `r` / `R` | 刷新选中项 / 全部 |
| `?` | 帮助覆盖层 |
| `q` / `Ctrl+C` | 退出 |
## 配置
创建 `~/.config/ccmd/config.toml`:
```
roots = ["~/.cache", "~/Library/Caches", "~/.npm", "~/.cargo/registry"]
sort_by = "size" # size | name | modified
sort_desc = true
confirm_delete = true
[vulncheck]
enabled = false # set true to scan on startup
[versioncheck]
enabled = false # set true to check on startup
```
CLI 参数会覆盖配置文件中的值。
## 工作原理
### 缓存检测
`ccmd` 遍历您的缓存目录并通过目录名称和结构识别提供者。每个提供者都有自定义逻辑来解码语义名称 — 例如,HuggingFace 将模型存储在类似 `models--meta-llama--Llama-3.1-8B` 的目录中,ccmd 将其显示为 `[model] meta-llama/Llama-3.1-8B`。
### 漏洞扫描
当您按下 `V`(或传递 `--vulncheck`)时:
1. `ccmd` 遍历缓存树以发现具有可识别名称 + 版本的包
2. 向 [OSV.dev API](https://osv.dev) 发送批量查询(每个请求分块为 100 个包)
3. 对于发现的每个漏洞,获取详细公告以提取修复版本
4. 过滤掉已由安装版本修复的漏洞
5. 在详情面板中显示结果,包括修复版本、升级命令和公告链接
### npm 供应链检测
npx 缓存(`~/.npm/_npx/`)包含完整的 `node_modules` 树。`ccmd` 扫描每个传递依赖以查找:
- **已知 CVE**(通过 OSV.dev)
- **安装脚本**(`preinstall`、`install`、`postinstall`)— 供应链攻击的主要载体
- **依赖深度** — 包是直接依赖还是深层传递依赖
### 过滤和清理工作流程
清理有漏洞包的工作流程:
1. **扫描**:按 `V` 扫描所有包的 CVE
2. **过滤**:按 `f` 仅显示有漏洞的项目(不匹配的项目被调暗)
3. **审查**:导航查看修复版本和升级命令
4. **标记**:按 `m` 标记所有有漏洞的项目以进行删除
5. **删除**:按 `d` 删除 — 释放并强制重新下载
## 架构
```
src/
├── main.rs # CLI bootstrap, terminal setup
├── config.rs # TOML config + CLI flag merging
├── app.rs # Event loop, key handling, rendering
├── tree/
│ ├── node.rs # TreeNode, CacheKind enum
│ └── state.rs # TreeState, FilterMode, visibility, marking
├── scanner/
│ ├── mod.rs # Background scan orchestrator, package discovery
│ └── walker.rs # Directory traversal, size calculation
├── providers/
│ ├── mod.rs # Provider dispatch, safety levels, upgrade commands
│ ├── huggingface.rs # HuggingFace Hub semantic decoding
│ ├── pip.rs, uv.rs # Python package providers
│ ├── npm.rs # npm + npx + node_modules scanning
│ ├── cargo.rs # Rust crate provider
│ └── ... # 7 more providers
├── security/
│ ├── mod.rs # Scan orchestration, vulnerability filtering
│ ├── osv.rs # OSV.dev API, version comparison, fix extraction
│ └── registry.rs # PyPI, crates.io, npm registry lookups
└── ui/
├── tree_panel.rs # Left pane — tree with status icons
├── detail_panel.rs # Right pane — metadata, vulns, guidance
├── dialogs.rs # Delete confirmation, help overlay
└── theme.rs # Color and style constants
```
- **无异步运行时** — 纯 `std::thread` + `mpsc::channel`
- **扁平竞技场树** — 避免递归结构和借用检查器问题
- **后台扫描** — API 调用和目录遍历期间 UI 保持响应
## 作者
**Julien Simon** — [julien@julien.org](mailto:julien@julien.org) — [github.com/juliensimon](https://github.com/juliensimon)
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
标签:Cargo, DevOps工具, Homebrew, HuggingFace, npm, pip, Rust, TUI, 依赖管理, 包管理器, 可视化界面, 威胁情报, 开发者工具, 磁盘清理, 磁盘空间回收, 系统清理, 终端工具, 统一API, 缓存管理, 网络安全, 网络流量审计, 通知系统, 隐私保护