build_approval_reason 改 async + 接收 db,对 delete/restore/purge/update/bind/create_task 的 id/project_id 查 ProjectRepo.get_by_id 拼「项目名」(id=x)(原只拼裸 id,用户反馈'只返回 ID 不知道是什么数据') 新增 resolve_project_label helper;process_tool_calls 调用改 await 来源 aichat审查报告 第二章 + 用户 2026-06-14 再反馈;cargo 0 err
4.9 KiB
4.9 KiB
构想:AI Chat 信息密度优化 — 折叠 + 会话详情面板 — 2026-06-14
性质:功能升级构想(瞬时灵感),未实现。记录作为后期优化参考。
背景
提高 AI chat 对话区有用信息密度。当前长回复/代码块/历史轮次全展开,信息密度低,关键内容被淹没。两个构想:① 卡片与消息折叠策略;② 会话详情面板组件。
构想一:卡片与消息折叠
当前折叠现状(2026-06-14 探索)
已有折叠:
- 工具卡片:卡片级折叠(
ToolCardList.vueexpandedCards)+ 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-667watch):新内容追加时收起旧已完成/已拒绝卡。 - 侧栏归档分组可折叠。
未折叠(可优化):
- AI 消息正文:template
AiChat.vue:191-198v-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 已有审计表。