# 构想:AI Chat 信息密度优化 — 折叠 + 会话详情面板 — 2026-06-14

> 性质:功能升级构想(瞬时灵感),未实现。记录作为后期优化参考。

## 背景

提高 AI chat 对话区有用信息密度。当前长回复/代码块/历史轮次全展开,信息密度低,关键内容被淹没。两个构想:① 卡片与消息折叠策略;② 会话详情面板组件。

---

## 构想一:卡片与消息折叠

### 当前折叠现状(2026-06-14 探索)

**已有折叠**:
- 工具卡片:卡片级折叠(`ToolCardList.vue` expandedCards)+ read_file 内容级折叠(expandedTools,max-height 180px + 渐隐)+ list_directory max-height 220px + 通用 result max-height 100px。
- `shouldKeepOpen`:running/pending_approval/rejected/write_file 保持展开。
- auto-collapse(`AiChat.vue:639-667` watch):新内容追加时收起旧已完成/已拒绝卡。
- 侧栏归档分组可折叠。

**未折叠(可优化)**:
- AI 消息正文:template `AiChat.vue:191-198` `v-html` 全展开,长 markdown 无截断。
- 代码块:markdown `pre code` 无折叠(`:1103-1118` 仅样式)。
- 用户消息:`ai-msg-bubble--user` 全展开(`:1058`)。
- 同消息多 toolCall:逐卡渲染,无聚合。
- 历史 agent 轮次:每轮独立气泡全展开,无折叠。

### 可折叠优化点

| 对象 | 当前 | 折叠策略建议 |
|------|------|-------------|
| AI 消息正文 | 全展开 | >N 行(如 15)截断 + 渐隐 + "展开"(复用 read_file 卡的 max-height + ::after 模式);折叠态显示首行摘要 |
| 代码块 | 全展开 | >20 行折叠,显示"展开 N 行";默认显示首尾几行 |
| 用户消息 | 全展开 | >5 行折叠为摘要 + "展开" |
| 同消息多 toolCall | 逐卡 | ≥3 个聚合成"完成 N 个工具调用 [展开]",展开后逐卡(已有 auto-collapse 配合) |
| 历史 agent 轮次 | 每轮全展开 | 非最新轮折叠为单行(轮次标识 + 文本摘要 + 工具数),点击展开 |
| 错误消息 | 各自气泡 | 连续多条错误可堆叠折叠 |

### 设计原则
- 折叠态必须有**摘要**(避免光秃秃):AI 消息取首行/工具卡已有 `toolResultSummary`。
- 最新/活跃内容默认展开,历史默认折叠(与现有 auto-collapse 一致)。
- 流式生成中不折叠(避免重渲染抖动,与 H1 流式重解析问题联动)。
- 折叠状态可记忆(同会话内持久,刷新重置)。

---

## 构想二:会话详情面板

> 在 AI Chat 对话面板增加"会话详情"功能组件,聚合展示当前会话的全维度信息。

### 功能建议

**1. 当前会话整体信息**
- 标题 / provider / model / conversation_id
- token 总量(prompt + completion,来自 conversation 表累加字段)
- 消息数 / 工具调用数 / 审批数(通过/拒绝/待审)
- 创建时间 / 更新时间 / 持续时长

**2. 历史整体对话**
- 侧栏已有对话列表;详情面板补:搜索(标题/内容)、按时间/provider/状态筛选、批量归档/删除、导出(Markdown/JSON)。

**3. 审计类能力**
- 工具执行时间线(来自 `ai_tool_executions` 表:tool_name / arguments / result / status / risk_level / requested_at / executed_at / decided_by)。
- 风险分布(Low/Medium/High 统计)、审批通过率。
- token 消耗趋势(按轮次/按时间)。
- 决策记录跳转(若有 DecisionJournal 关联)。

**4. 快捷获取某类信息**
- 按工具类型筛选(只看 read_file / 只看 create_project)。
- 按风险/状态筛选(只看待审批)。
- 关键词搜消息全文。
- 时间范围筛选。

### 后端数据支撑(已有,无需新建)

| 数据 | 来源 |
|------|------|
| 对话元信息 + token | `conversations` 表(title/model/provider_id/prompt_tokens/completion_tokens/messages),`conversation.rs` 累加 |
| 工具执行审计 | `ai_tool_executions` 表,`audit.rs` 写入 + `list_pending` / `find_by_tool_call_id` 查询 |
| 消息全文 | `ai_conversation_detail` IPC(已返回 messages JSON) |

**待补 IPC**:工具执行按 conversation 聚合查询(现有 list_pending / find_by_tool_call_id,需加 by_conversation 全量时间线);token 趋势(按轮次拆分,当前只存总量)。

### 组件设想
- 入口:header 加"详情"按钮,或对话项右键菜单。
- 形态:侧滑面板(drawer,不离开对话)/ modal / 独立路由(/ai-detail/:id)。
- 结构:Tab 分「概览 / 审计时间线 / 消息检索」。

---

## 评估

| 构想 | 复杂度 | 依赖 | 建议 |
|------|--------|------|------|
| 折叠策略 | 中 | 纯前端,复用现有 max-height 模式 | 优先做 AI 消息正文 + 代码块折叠,收益最大 |
| 会话详情面板 | 中高 | 前端新组件 + 后端补聚合 IPC | 审计时间线最有价值(数据已在),先做概览 + 审计两 tab |

两者都与信息密度相关:折叠压缩单条信息,详情面板聚合全局信息。可并行推进。

## 关联
- 折叠与 [[devflow-aichat-review-pending]] H1(流式重解析)联动——流式中不折叠,完成后折叠。
- 会话详情审计能力复用 audit.rs 已有审计表。
