Sessions
会话卡片
SessionCard 的外观、悬停按钮、右键菜单与会话状态
会话卡片
会话卡片(SessionCard)是侧边栏里最频繁打交道的元素。每张卡片对应一条 Session 记录,承载切换、重命名、置顶、导出、删除等常用操作。

卡片外观
一张 SessionCard 由四部分构成:
[消息图标] 会话标题(截断) [活跃指示点] [置顶] [删除] [⋯]| 元素 | 说明 |
|---|---|
MessageSquare 图标 | 来自 lucide-react,统一风格 |
| 标题 | 单行截断,默认取自 Claude Code 会话首条用户消息;可被重命名 |
| 活跃指示点 | 仅当卡片为当前激活会话时,右侧出现 1.5x1.5 的强调色圆点 |
| 悬停按钮组 | 鼠标进入时淡入:置顶开关、删除按钮 |
MoreVertical 按钮 | 悬停时淡入,点击弹出完整右键菜单 |
激活态卡片使用 --bg-active 背景,非激活态悬停使用 --bg-hover。
交互方式
| 触发 | 动作 |
|---|---|
| 单击 | 激活会话,切换到对应聊天 Tab |
| 双击 | 打开"重命名"输入对话框 |
| 悬停 + 点击 Pin 图标 | 切换置顶状态 |
| 悬停 + 点击 Trash 图标 | 立即删除(无二次确认) |
悬停 + 点击 ⋯ | 弹出上下文菜单 |
右键菜单
SessionCard 内置一个 ContextMenu,菜单项包括:
- 置顶会话 / 取消置顶(
Pin/PinOff图标)- 调用
sessionTogglePin(id),然后重新初始化所在项目的分页(initProjectPagination),置顶会话总是排在最前
- 调用
- 重命名(
Pencil图标)- 弹出
InputDialog,标题"重命名会话",提示"保持简短且易于识别",预填当前标题 - 确认后调用
sessionUpdateTitle(id, newTitle)
- 弹出
- 导出为 Markdown(
Download图标)- 弹出系统保存对话框,默认文件名取会话标题,调用
sessionExportToFile写入.md
- 弹出系统保存对话框,默认文件名取会话标题,调用
- 删除会话(
Trash2图标,红色)- 调用
sessionDelete(id),然后通过removeSessionAndFill把激活态交给相邻会话
- 调用
置顶行为
- 置顶项目、置顶会话都使用同一个 SQLite 字段(
pinned),排序规则统一:置顶项排在前面,非置顶项按更新时间倒序 - 一个会话的置顶状态会随所在项目一起持久化到本地数据库
- 切换置顶后,前端调用
initProjectPagination(projectPath)重新拉取该项目的排序结果
状态标签
源码中会话本身没有"草稿 / 归档 / 进行中"等状态字段在卡片上显示,状态差异主要通过:
- 草稿 — 在搜索时显示,或进入聊天界面后在输入框自动恢复,详见 搜索与归档
- 归档 — 搜索结果和归档列表里区分,卡片本身不显示标签
- 活跃 — 右侧小圆点指示