### 背景

我经常需要将项目的目录结构提供给LLM, 以便它能更好地理解项目上下文。目前我通常使用 `tree` 命令或者手动整理, 这个过程比较繁琐且不统一。

因此, 我希望有一个内置命令, 可以快速生成指定目录的文件结构信息, 并能方便地复制粘贴给LLM。

### 前置条件

- [x] 调研: 如何高效地遍历目录并生成树形结构?
  - **调研结果**: `walkdir` crate 是标准选择。
- [x] 调研: 如何根据 `.gitignore` 文件过滤掉不需要的文件和目录?
  - **调研结果**: `ignore` crate 是 `ripgrep` 使用的库, 非常强大和高效。

### 实现细节

#### 依赖库选哪个?

- 目录遍历: `walkdir`
- `.gitignore` 规则处理: `ignore`
- 命令行解析: `clap` (项目已集成)

#### 命令界面设计

这个命令应该是一个通用的工具, 不与特定服务（如 cursor）耦合。因此可以设计为 `collect` 的子命令。

```bash
llman project tree [path] [OPTIONS]
```

- `path`: 目标目录, 默认为当前目录 `.`
- `-o, --output <FILE>`: 将结果输出到指定文件, 而不是标准输出。
- `--no-ignore`: 不使用 `.gitignore` 文件进行过滤。
- `-d, --max-depth <DEPTH>`: 限制遍历的深度。
- `--append-default-context`: 智能地包含它认为有意义的文件（如`README.md`, `Cargo.toml`）的内容。

#### 输出格式

输出应该是类似 `tree` 命令的格式, 但更紧凑, 方便复制。

启用 `--append-default-context` 后，将在文件树的末尾追加关键文件的内容。

**默认输出:**
```
.
├── src
│   ├── main.rs
│   └── lib.rs
├── Cargo.toml
└── README.md
```

**`--append-default-context` 输出:**
```
.
├── src
│   ├── main.rs
│   └── lib.rs
├── Cargo.toml
└── README.md


---

# ./Cargo.toml

```
[package]
name = "llman"
...
```

---

# ./README.md

```
# llman - LLM 规则管理工具
...
```
