# Oneshot UI 优化计划

## 问题分析

当前 oneshot 模式的 UI 存在以下问题：

### 1. 工具调用显示过于冗余

当前输出：
```
⚙ R1 1个工具 🔧
🔧 调用工具 Ask 参数: {"questions":[{"header": "测试确认"...
```

问题：
- 输出了完整的 JSON 参数，太长且难以阅读
- 重复显示工具名称和图标
- "调用工具 XXX 参数:" 这种格式太啰嗦

### 2. Ask 交互界面不够美观

当前输出：
```
 ❓   这是一条测试消息，Ask 工具是否正常工作？
   测试确认
❯ 功能正常 — Ask 工具运行正常，无需进一步测试
  需要调试 — Ask 工具存在问题，需要排查
• ↑↓ 选择  Enter 确认
```

问题：
- ❓ 前有多余空格
- header（测试确认）显示太低调，不容易看出它是 header
- 选项没有视觉层次感，像是平铺文本
- 操作提示（↑↓ 选择）太朴素

### 3. 工具执行结果格式紧凑

当前输出：
```
✓27 字符 37.0s
```

问题：
- 缺少分隔，看起来像"✓27 字符"连在一起
- 没有明显的成功/失败区分

### 4. 整体风格问题

- 没有像 TUI 那样的视觉层次
- 图标和颜色使用不一致
- 信息密度高但不清晰

---

## 优化方案

### 1. 简化工具调用显示

**优化前：**
```
⚙ R1 1个工具 🔧
🔧 调用工具 Ask 参数: {"questions":[...]}
```

**优化后：**
```
⚙ R1 · 1 工具
  🔧 Ask
```

对于需要确认的工具：
```
⚙ R1 · 1 工具
  ⚡ Bash
  ❯ run: cargo build
  • ↑↓ 选择  Enter 确认
```

**实现要点：**
- 工具调用批次显示简化为 `⚙ R{N} · {count} 工具`
- 每个工具独立一行，显示：图标 + 工具名
- 不再输出完整 JSON 参数
- 有 `confirmation_message` 时才显示确认提示

### 2. 优化 Ask 交互界面

**优化后：**
```
┌─ 测试确认 ─────────────────────────────────────
│ 这是一条测试消息，Ask 工具是否正常工作？
│
│ ❯ 功能正常
│   Ask 工具运行正常，无需进一步测试
│
│   需要调试
│   Ask 工具存在问题，需要排查
│
│ • ↑↓ 移动  Enter 确认
└────────────────────────────────────────────────
```

或者更简洁的版本（无边框）：
```
❓ 测试确认
   这是一条测试消息，Ask 工具是否正常工作？

   ❯ 功能正常
     Ask 工具运行正常，无需进一步测试

     需要调试
     Ask 工具存在问题，需要排查

   • ↑↓ 移动  Enter 确认
```

**实现要点：**
- header 作为标题醒目显示
- 选项分两行：label（高亮）+ description（次要）
- 当前选中项用 `❯` 指示，高亮显示
- 操作提示更清晰

### 3. 优化工具执行结果显示

**优化前：**
```
✓27 字符 37.0s
```

**优化后：**
```
✓ 27 字符 · 37.0s
```

或对于失败：
```
✗ 失败 · 37.0s
```

**实现要点：**
- 状态图标和内容之间加空格
- 用 `·` 分隔摘要和耗时
- 成功用绿色 ✓，失败用红色 ✗

### 4. 整体风格统一

- 使用一致的缩进（2 空格）
- 状态图标和文字之间统一加空格
- 分隔符统一使用 `·`
- 颜色使用：
  - 成功/确认：绿色
  - 失败/拒绝：红色
  - 提示/次要：dimmed
  - 当前选中：cyan bold
  - 工具类别：按 ToolCategory 颜色

---

## 具体修改点

### 文件：`src/command/chat/oneshot.rs`

#### 1. 工具调用批次显示（第 685-697 行附近）

```rust
// 当前代码
eprintln!(
    "{} R{} {}个工具 {}",
    "⚙".dimmed(),
    round,
    items.len(),
    category_icons,
);

// 优化后
eprintln!(
    "{} R{} · {} 工具",
    "⚙".dimmed(),
    round,
    items.len(),
);
```

#### 2. 移除冗余的工具参数输出（第 884 行附近）

```rust
// 当前代码
eprintln!("{}{} {} ...", icon, multi_prefix, confirm_msg.cyan());

// 优化后 - 直接显示工具名，不需要 confirmation_message
eprintln!("  {} {}", icon, item.name.cyan());
```

#### 3. Ask 交互界面重写（第 386-551 行）

完全重写 Ask 处理逻辑，使用更清晰的布局：
- 使用边框或缩进区分层次
- header 作为标题醒目显示
- 选项分 label 和 description 两行
- 操作提示更清晰

#### 4. 工具执行结果显示（第 897-912 行）

```rust
// 当前代码
if result.is_error {
    eprintln!(
        "{}{}{} {}",
        "✗".red(),
        multi_prefix,
        "失败".red(),
        elapsed_str.dimmed()
    );
} else {
    eprintln!(
        "{}{}{} {}",
        "✓".green(),
        multi_prefix,
        summary.green(),
        elapsed_str.dimmed()
    );
}

// 优化后
if result.is_error {
    eprintln!(
        "  {} {} · {}",
        "✗".red(),
        "失败".red(),
        elapsed_str.dimmed()
    );
} else {
    eprintln!(
        "  {} {} · {}",
        "✓".green(),
        summary.green(),
        elapsed_str.dimmed()
    );
}
```

#### 5. `interactive_confirm` 函数优化（第 224-299 行）

改进交互确认的视觉呈现：
- 添加标题行
- 选项分两行显示
- 操作提示使用更醒目的样式

#### 6. 多选交互优化（第 399-430 行）

改进多选的视觉呈现：
- checkbox 使用更清晰的样式
- 选中项使用 ✓ 而不是 ✔
- 布局更清晰

---

## 预期效果示例

### 简单工具调用

**优化前：**
```
⚙ R1 1个工具 📄
📄 调用工具 Read 参数: {"file_path": "/Users/lingojack/dev_custom/j/src/command/chat/oneshot.rs"}
✓956 行 (src/command/chat/oneshot.rs) 1.2s
```

**优化后：**
```
⚙ R1 · 1 工具
  📄 Read
  ✓ 956 行 · 1.2s
```

### 需要确认的工具

**优化前：**
```
⚙ R1 1个工具 ⚡
⚡ 执行命令: cargo build ...
❯ 允许执行
  拒绝
  始终允许 (allow: Bash.command=cargo build)
• ↑↓ 选择  Enter 确认
✓完成 (12 行输出) 45.3s
```

**优化后：**
```
⚙ R1 · 1 工具
  ⚡ Bash · cargo build

  ❯ 允许执行
     执行该命令

     拒绝
     跳过本次执行

     始终允许
     以后自动允许相同命令

  • ↑↓ 移动  Enter 确认

  ✓ 完成 · 45.3s
```

### Ask 交互

**优化前：**
```
 ❓   这是一条测试消息，Ask 工具是否正常工作？
   测试确认
❯ 功能正常 — Ask 工具运行正常，无需进一步测试
  需要调试 — Ask 工具存在问题，需要排查
• ↑↓ 选择  Enter 确认
```

**优化后：**
```
❓ 测试确认
   这是一条测试消息，Ask 工具是否正常工作？

   ❯ 功能正常
     Ask 工具运行正常，无需进一步测试

     需要调试
     Ask 工具存在问题，需要排查

   • ↑↓ 移动  Enter 确认
```

---

## 实施步骤

1. **修改工具调用批次显示** - 简化 R1 显示格式
2. **移除工具参数输出** - 不再显示完整 JSON
3. **优化工具执行结果显示** - 添加分隔符和空格
4. **重写 Ask 交互界面** - 分离 label 和 description
5. **优化 interactive_confirm** - 改进确认对话框样式
6. **优化多选交互** - 改进 checkbox 样式

---

## 注意事项

- 保持与 TUI 风格的一致性（使用相同的颜色主题）
- 确保在窄终端上的显示效果
- 保持代码可维护性，避免过度复杂的格式化逻辑
