juliensimon/cache-commander

GitHub: juliensimon/cache-commander

一个用于探索、审计和清理开发者缓存目录的终端 UI 工具,支持 CVE 扫描和过时包检测。

Stars: 32 | Forks: 2

# ccmd — 缓存管理器 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/0ca7976b6d121626.svg)](https://github.com/juliensimon/cache-commander/actions/workflows/ci.yml) [![发布](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/b9d34ad5be121627.svg)](https://github.com/juliensimon/cache-commander/releases) [![GitHub 发布](https://img.shields.io/github/v/release/juliensimon/cache-commander)](https://github.com/juliensimon/cache-commander/releases) [![许可证: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![Rust](https://img.shields.io/badge/Rust-1.85%2B-orange?logo=rust)](https://www.rust-lang.org) [![macOS](https://img.shields.io/badge/macOS-x86__64%20%7C%20ARM-black?logo=apple)](https://github.com/juliensimon/cache-commander/releases) [![Linux](https://img.shields.io/badge/Linux-x86__64%20%7C%20ARM-black?logo=linux&logoColor=white)](https://github.com/juliensimon/cache-commander/releases) [![crates.io](https://img.shields.io/crates/v/ccmd)](https://crates.io/crates/ccmd) [![Homebrew](https://img.shields.io/badge/Homebrew-tap-brown?logo=homebrew)](https://github.com/juliensimon/homebrew-tap) 一个用于在 macOS 和 Linux 上探索、审计和清理开发者缓存目录的终端 UI (TUI)。扫描缓存包以发现已知 CVE、查找过时依赖项并回收磁盘空间 — 全部在一个工具中完成。 开发者机器积累了数十 GB 的隐形缓存数据 — ML 模型、包存档、构建产物、下载的 bottles。`ccmd` 让这一切变得可见、可扫描漏洞、可安全删除。 ![缓存管理器截图](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/f3db34ab0f121629.png) ## 特性 - **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, 缓存管理, 网络安全, 网络流量审计, 通知系统, 隐私保护