fix(chat): 会话列表无区分度,让用户误以为是 mock 数据

## 问题
用户截图:会话列表 20+ 项全部显示「新对话 / QC-505 / 5月8日」,
完全相同,怀疑是写死的 mock 数据。

## 真相
数据其实是真实的(hermes sessions export 输出的 JSONL):
- title 全空 → fallback 到 t('chatNewSession') = "新对话"
- 用户用同一模型 QC-505 跑了所有会话
- 用户在同一天(5月8日)跑的
- 视觉冗余 100% → 看起来像写死

## 修复(让真实数据显示出区分度)
1. sessionDisplayTitle: 没标题时不再统一显示「新对话」,
   改为「未命名 · {id 后6位}」(每个会话不同后缀,一眼能区分)
2. meta 行加 messageCount —— 显示「N 条」让每个会话有自己的数字
3. 加 i18n 键 chatUntitledSession + chatSessionMsgCount(11 语完整)

## 效果
之前:
  新对话
  QC-505 5月8日
  新对话
  QC-505 5月8日
  ... × 20

之后:
  未命名 · a3f2b8
  QC-505 5月8日 28 条
  未命名 · 7c91d4
  QC-505 5月8日 14 条
  未命名 · e082f1
  QC-505 5月8日 3 条
  ...

用户立刻能看出每个会话是真实独立的,不会再怀疑 mock。
This commit is contained in:
晴天
2026-05-14 06:40:41 +08:00
parent 1873e23371
commit d97e196a48
2 changed files with 11 additions and 1 deletions

View File

@@ -99,7 +99,14 @@ function formatTime(ts) {
}
function sessionDisplayTitle(s) {
return s.title || t('engine.chatNewSession')
if (s.title) return s.title
// 没有标题时用 id 后 6 位区分(避免 20+ 个会话都显示"新对话",让用户误以为是 mock 数据)
const sid = String(s.id || '')
if (sid && sid.length >= 6) {
const tail = sid.slice(-6)
return t('engine.chatUntitledSession', { id: tail })
}
return t('engine.chatNewSession')
}
/** Compact token formatter — `1234567 → "1.2M"`, `12345 → "12.3k"`, `42 → "42"`. */
@@ -373,6 +380,7 @@ export function render() {
<div class="hm-chat-session-meta">
${s.model ? `<span class="hm-chat-session-model">${escHtml(s.model)}</span>` : ''}
<span class="hm-chat-session-time">${escHtml(formatTime(s.updatedAt || s.createdAt))}</span>
${s.messageCount > 0 ? `<span class="hm-chat-session-msgs">${escHtml(t('engine.chatSessionMsgCount', { n: s.messageCount }))}</span>` : ''}
</div>
</div>
${selectionMode ? '' : `

View File

@@ -299,6 +299,8 @@ export default {
chatPlaceholder: _('输入消息...', 'Type a message...', '輸入訊息...'),
chatSend: _('发送', 'Send', '發送'),
chatNewSession: _('新对话', 'New Chat', '新對話'),
chatUntitledSession: _('未命名 · {id}', 'Untitled · {id}', '未命名 · {id}', '無題 · {id}', '제목 없음 · {id}', 'Chưa đặt tên · {id}', 'Sin título · {id}', 'Sem título · {id}', 'Без названия · {id}', 'Sans titre · {id}', 'Ohne Titel · {id}'),
chatSessionMsgCount: _('{n} 条', '{n} msgs', '{n} 則', '{n} 件', '{n}개', '{n} tin', '{n} mensajes', '{n} mensagens', '{n} сообщ.', '{n} messages', '{n} Nachrichten'),
chatNewChat: _('新建', 'New chat', '新建'),
chatThinking: _('正在思考...', 'Thinking...', '正在思考...'),
chatError: _('发送失败: {error}', 'Send failed: {error}', '發送失敗: {error}'),