# MoonDisk

MoonDisk 是使用 MoonBit 编写的磁盘空间分析、快照比较与安全清理规划工具。它帮助开发者回答三个问题：空间被什么占用、目录为什么增长、哪些内容可以在可恢复的前提下处理。

## 五分钟上手

准备 `moonc` 版本不低于 0.10.14 的 MoonBit 工具链（可用 `moonc -v` 检查），然后执行：

```sh
git clone https://github.com/xiaobai718-ab/moondisk.git
cd moondisk
moon update
moon run examples/quickstart
```

该示例完全使用内存数据，不读取、不移动真实文件，会依次展示空间统计、快照差异、目录增长热点、组成变化、增长策略、容量预测和清理计划。

对当前项目执行只读扫描：

```sh
moon run cmd/main -- scan . --profile developer
```

保存快照并生成离线 HTML 报告：

```sh
moon run cmd/main -- snapshot . --profile developer --output workspace.snapshot.json
moon run cmd/main -- audit workspace.snapshot.json
moon run cmd/main -- report workspace.snapshot.json --output workspace.report.html
```

## 典型工作流

### 定位目录增长

```sh
moon run cmd/main -- snapshot ./workspace --output before.snapshot.json
# 完成编译、依赖安装或数据处理后再次扫描
moon run cmd/main -- snapshot ./workspace --output after.snapshot.json
moon run cmd/main -- diff before.snapshot.json after.snapshot.json
moon run cmd/main -- hotspots before.snapshot.json after.snapshot.json --depth 1 --output hotspots.json
moon run cmd/main -- composition before.snapshot.json after.snapshot.json --by category --output composition.json
moon run cmd/main -- init-growth-policy --output growth.json
moon run cmd/main -- check-growth before.snapshot.json after.snapshot.json --config growth.json --output evidence.json
```

### 生成安全清理计划

```sh
moon run cmd/main -- init-rules --output rules.json
moon run cmd/main -- init-policy --output policy.json
moon run cmd/main -- plan ./workspace --rules rules.json --quarantine ./quarantine --output cleanup.plan.json
moon run cmd/main -- review-plan cleanup.plan.json --policy policy.json
```

`plan` 只生成计划，不修改文件。只有主动运行 `apply` 才会把候选项移动到隔离目录：

```sh
moon run cmd/main -- apply cleanup.plan.json --policy policy.json --output operation.json
moon run cmd/main -- audit-operation operation.json
moon run cmd/main -- restore operation.json --output restore.json
```

MoonDisk 不提供永久删除命令。执行前会重新扫描并拒绝已经变化的来源；恢复时也不会覆盖已有文件。

## 核心能力

- 原生异步目录扫描，可配置深度、条目上限、并发度、隐藏文件、符号链接和忽略规则；
- 文件、目录、扩展名、类型、修改时间和空目录统计；
- 最大文件、最大目录和终端树状展示；
- JSON 快照、差异比较、目录增长热点及多快照历史趋势；
- 按文件类型或扩展名解释空间组成变化，并提供可供 CI 使用的增长策略检查；
- 历史快照按最新、每日和每周周期压缩，支持增长速率、波动性与容量耗尽预测；
- 精确重复文件检测、条件查询和存储预算；
- 带原因、风险等级和可再生属性的清理规则；
- 清理计划、策略审批、来源变化检查、隔离执行、审计与恢复；
- JSON、RFC 4180 CSV 和独立 HTML 报告；
- Windows 与 Ubuntu 双平台持续集成。

## 与普通 `du` 的区别

`du` 主要回答当前目录有多大。MoonDisk 还保存结构化快照，解释两次扫描之间的增长来源，按规则生成清理建议，并通过审批策略、隔离目录、操作清单和恢复流程控制风险。它不是分区工具、文件管理器或永久删除工具。

## 验收与开发

一键示例：

```sh
moon run examples/quickstart
```

完整自动检查：

```sh
moon fmt --check
moon check --target native --deny-warn
moon test --target native --package xiaobai718-ab/moondisk --deny-warn
moon build --target native
```

完整文件系统演示见 [DEMO.md](DEMO.md)，逐项验收说明见 [ACCEPTANCE.md](ACCEPTANCE.md)，性能测试方法见 [BENCHMARK.md](BENCHMARK.md)。

## 发布到 mooncakes.io

验收前需使用拥有 `xiaobai718-ab` 命名空间的账号发布：

```sh
moon package --list
moon login
moon publish --dry-run
moon publish
```

完整发布前检查与版本标签步骤见 [PUBLISHING.md](PUBLISHING.md)。同一版本只能发布一次，确认无误后再执行最后一条命令。

## 开源许可证

项目采用 Apache License 2.0。
