SuperAPI AI 工具集

disk-cleanup

办公与效率

查看项目

更新于 11-05 02:59

技能介绍

用途

Disk Cleanup 用于扫描并清理 macOS 上的缓存、包管理器数据、崩溃转储和应用缓存,以回收磁盘空间。其设计强调确定性:所有目标知识集中在 targets.json 配置注册表中,测量与删除逻辑分别由两个脚本承担。

主要能力

  • 只读调查:python3 scripts/survey.py 测量大小、风险、标记和未分类项,不触碰任何文件;加 --json 输出机器可读结果。
  • 清理执行:python3 scripts/clean.py 默认 dry-run,仅打印计划;加 --go 才执行。支持按预设(safe/full)、按 ID、按跳过项选择目标。
  • 风险分级:safe 自动运行;medium 需 --allow-medium;never 即使按 ID 指定也会被拒绝;advisory 仅打印指引,从不执行。
  • 路径预检:每个进入回收站的路径需经 realpath 解析、位于 allowed_roots 下、非符号链接,且不能是 $HOME 或 /,否则跳过并报告。
  • 删除方式:所有文件移除使用 trash,从不使用 rm;释放的空间停留在废纸篓,直到清空(--empty-trash 或用户手动清空)。
  • 注册表维护:通过编辑 targets.json 增改目标,无需改代码。支持 trash、find-trash、command、simctl、downloads-scan、advisory 等方法。
  • 个性化配置:config.json 提供通用默认值;个人或机器特定内容放入 config.local.json(gitignored),列表取并集,标量覆盖。

使用方式

脚本可无依赖(仅标准库)在终端直接运行:

python3 scripts/survey.py            # 只读:大小、风险、标记、未分类
python3 scripts/survey.py --json     # 同上,机器可读

python3 scripts/clean.py --preset safe              # DRY-RUN 计划(默认,不删除)
python3 scripts/clean.py --preset safe --go         # 执行(仅 safe 风险)
python3 scripts/clean.py --preset full --allow-medium --go --empty-trash
python3 scripts/clean.py --ids cargo-registry-cache,go-mod-cache --go
python3 scripts/clean.py --preset safe --skip ollama-models --go

智能体工作流:先运行 survey.py --json,转述压缩摘要(磁盘剩余、safe/medium 可回收总量、flags、主要目标),不要倾倒完整 JSON;对普通“清理安全内容”请求,展示 safe 总量并运行 clean.py --preset safe --go(可提供 --empty-trash);仅在 medium 目标、未分类发现、advisory 提示、Docker/模拟器决策时升级给用户判断。

适用场景

  • 需要回收 macOS 磁盘空间,且希望清理过程可预测、可审查。
  • 希望先查看清理计划再决定是否执行。
  • 需要区分安全可再生成缓存与需人工确认的 medium 目标(如 ML 模型、设备支持、项目 node_modules)。
  • 需要处理崩溃转储、包管理器缓存、应用缓存、Downloads 扫描等。

限制

  • 仅面向 macOS。
  • 大小基于 du 估算,在 APFS 上为近似值。
  • Docker 清理仍需智能体驱动,需用户按名称选择或使用 docker system prune -a -f;命名卷删除即数据丢失,需按名称确认。
  • 从不调用 mo(TUI-only,即使 dry-run 也会阻塞等待真实终端)。
  • 安装的软件应保持 risk: never(如 uv/tools、uv/python、~/.rustup/toolchains、~/.bun、~/.deno 并非缓存)。
  • 非 advisory 目标的路径必须位于 allowed_roots 下,否则预检会拒绝。
  • 每台机器的路径(allowed_roots、node-modules-projects 的查找根 ~/ai_projects)为示例,需按用户布局调整;不存在的目标测量为 0 并跳过。
  • config.local.json 永不提交。