diff --git a/packages/server/src/services/hermes/sessions-db.ts b/packages/server/src/services/hermes/sessions-db.ts index 1b2adac..0367fcc 100644 --- a/packages/server/src/services/hermes/sessions-db.ts +++ b/packages/server/src/services/hermes/sessions-db.ts @@ -48,12 +48,16 @@ function normalizeNullableString(value: unknown): string | null { function mapRow(row: Record): HermesSessionRow { const startedAt = normalizeNumber(row.started_at) + const rawTitle = normalizeNullableString(row.title) + const preview = String(row.preview || '') + // Fallback: when no explicit title, use first user message as title (same as CLI path) + const title = rawTitle || (preview ? (preview.length > 40 ? preview.slice(0, 40) + '...' : preview) : null) return { id: String(row.id || ''), source: String(row.source || ''), user_id: normalizeNullableString(row.user_id), model: String(row.model || ''), - title: normalizeNullableString(row.title), + title, started_at: startedAt, ended_at: normalizeNullableNumber(row.ended_at), end_reason: normalizeNullableString(row.end_reason), diff --git a/tests/server/sessions-db.test.ts b/tests/server/sessions-db.test.ts index 79da8d8..22efa3a 100644 --- a/tests/server/sessions-db.test.ts +++ b/tests/server/sessions-db.test.ts @@ -120,6 +120,6 @@ describe('session DB summaries', () => { expect(allMock).toHaveBeenCalledWith('telegram', 2) expect(rows[0].last_active).toBe(1710000100) expect(rows[0].source).toBe('telegram') - expect(rows[0].title).toBeNull() + expect(rows[0].title).toBe('preview text') }) })