# Plan: 对话记录展示优化方案 (修订版)

## 一、现状分析

### 1.1 当前架构

```
session.messages → build_message_lines_incremental → per_msg_lines + streaming_lines → draw_messages
```

核心渲染模块：`render_cache.rs`, `ui/chat.rs`, `markdown/parser.rs`

### 1.2 现有视觉风格

当前消息展示采用**无边框气泡式设计**：
- 用户消息：左侧标签 `┃ You` + 内容
- AI 消息：左侧标签 `┃ Sprite` + 内容  
- 工具消息：左侧图标标签 `┃ 🔧 Bash` + 折叠/展开内容

这种**轻量、无边框**的设计风格是正确的方向，应保持。

### 1.3 发现的改进点

1. **视觉层次可进一步提升**
   - 不同角色消息的背景色区分可更明显
   - 时间信息缺失，无法追溯对话时序

2. **长消息阅读体验**
   - 代码块超长时占用大量屏幕空间
   - 缺少快速折叠/展开交互

3. **消息导航效率**
   - Browse 模式缺少快速跳转快捷键 (g/G)

---

## 二、优化方案

### 2.1 消息时间戳

**改动范围：** `storage.rs`, `render_cache.rs`

**方案：**
- 在消息气泡顶部显示时间戳（使用 `text_dim` 颜色，轻量不干扰）
- 时间戳格式：混合模式（近期相对时间，超过 1 小时用绝对时间）
- 仅在消息间隔 > 30 秒时显示，避免冗余

**视觉效果：**
```
  2分钟前
┃ User
  这个函数怎么用？

  14:32
┃ Sprite  
  这个函数的作用是...
```

### 2.2 代码块智能折叠

**改动范围：** `render_cache.rs`, `app/ui_state.rs`

**方案：**
- 代码块超过 **15 行**时自动折叠
- 折叠状态显示：语言标识 + 首行代码 + `... (N 行)`
- 用户可通过快捷键全局切换折叠状态

**视觉效果：**
```
┃ Sprite
  ┌ rust ─────────────────────
  │ fn main() {              
  │     println!("Hello");   
  │ ... (共 42 行) [展开]
  └──────────────────────────
```

**注意：** 保持代码块边框（已有设计），这与工具消息边框不同。代码块边框是 Markdown 规范的一部分，用于界定代码内容范围。

### 2.3 Browse 模式导航增强

**改动范围：** `handler/browse.rs`, `ui/hint.rs`

**新增快捷键：**

| 按键 | 功能 |
|-----|------|
| `g` | 跳转到首条消息 |
| `G` | 跳转到最后一条消息 |
| `Space` | 展开/折叠当前消息的代码块 |

### 2.4 工具消息视觉简化

**改动范围：** `render_cache.rs`

**方案：**
- 保持现有无边框标签设计
- 仅调整参数预览的截断策略：智能截断，优先保留关键信息
- 工具结果成功/失败通过颜色区分（已有实现）

**保持现有风格：**
```
┃ 🔧 Read
  path: src/main.rs

┃ ✅ Read → 128行
  fn main() { ...
```

---

## 三、实施计划

### Phase 1: 消息时间戳 (预估 2h)

| 任务 | 改动文件 |
|-----|---------|
| Message 结构体添加 timestamp 字段 | `storage.rs` |
| 渲染时显示时间戳行 | `render_cache.rs` |
| 新消息自动记录时间戳 | `app/chat_app.rs` |

### Phase 2: 代码块折叠 (预估 3h)

| 任务 | 改动文件 |
|-----|---------|
| 折叠状态管理 | `app/ui_state.rs` |
| 折叠渲染逻辑 | `render_cache.rs` |
| 全局切换快捷键 | `handler/chat.rs` |

### Phase 3: Browse 导航增强 (预估 1h)

| 任务 | 改动文件 |
|-----|---------|
| g/G 快捷键处理 | `handler/browse.rs` |
| 提示栏更新 | `ui/hint.rs` |

---

## 四、设计原则

1. **保持轻量无边框风格** — 工具消息不添加边框，延续现有标签式设计
2. **时间戳轻量化** — 使用暗色，仅在必要时显示
3. **代码块边框保留** — 这是 Markdown 代码块的规范表现，不属于工具消息边框
4. **渐进式改进** — 不破坏现有审美，只在关键处增强

---

## 五、用户确认

请确认以下问题：

1. **时间戳显示位置？**
   - A: 消息顶部（标签上方）
   - B: 消息底部（内容下方）

2. **代码块折叠阈值？**
   - A: 超过 15 行折叠
   - B: 超过 20 行折叠

3. **是否需要 Phase 1-3 全部实施，还是优先其中某几项？**