feat: show last search query in session history

- Added last_query field to SearchSession interface
- loadSessions now fetches last user message for each session
- Session list displays: mode badge, title, last query, message count, time
- Added .hs-query CSS style for query text
This commit is contained in:
2026-10-27 14:50:44 +08:00
parent 763e4ecf33
commit bb80d52e98
2 changed files with 27 additions and 2 deletions

View File

@@ -6,6 +6,7 @@ export interface SearchSession {
title: string
mode: 'keyword' | 'visual' | 'people' | 'agent'
message_count: number
last_query?: string
created_at: string
updated_at: string
}
@@ -78,7 +79,23 @@ export function useSearchSession() {
})
if (!resp.ok) throw new Error(`HTTP ${resp.status}`)
const data = await resp.json()
sessions.value = data.sessions || []
// Enrich sessions with last query from messages
const sessions = data.sessions || []
for (const s of sessions) {
try {
const msgResp = await fetch(`${base}/api/v2/search-sessions/${s.id}/messages?limit=1`, {
headers: getAuthHeaders()
})
if (msgResp.ok) {
const msgData = await msgResp.json()
const lastUserMsg = msgData.messages?.find((m: any) => m.role === 'user')
if (lastUserMsg) {
s.last_query = lastUserMsg.content
}
}
} catch {}
}
sessions.value = sessions
} catch (e: any) {
error.value = e.message || 'Failed to load sessions'
} finally {

View File

@@ -44,7 +44,8 @@
<span class="hs-mode">{{ formatMode(s.mode) }}</span>
<div class="hs-title" @click="handleSelectSession(s)">{{ s.title }}</div>
</div>
<div class="hs-time">{{ s.message_count }} messages · {{ formatSessionTime(s.updated_at) }}</div>
<div v-if="s.last_query" class="hs-query">{{ s.last_query.slice(0, 30) }}{{ s.last_query.length > 30 ? '...' : '' }}</div>
<div class="hs-time">{{ s.message_count }} msgs · {{ formatSessionTime(s.updated_at) }}</div>
</div>
<button class="hs-menu-btn" @click.stop="toggleSessionMenu(s.id)">⋯</button>
<div v-if="activeSessionMenu === s.id" class="hs-menu">
@@ -1892,6 +1893,13 @@ function openSource(src: SourceInfo) {
overflow: hidden;
text-overflow: ellipsis;
}
.hs-query {
font-size: 11px;
color: var(--text-secondary);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.hs-item.pinned .hs-time { color: rgba(var(--primary-color-rgb), 0.8); }
.hs-mode {
font-size: 10px;