feat: add last message preview to session picker

Read the final user/assistant message from session transcripts and display
it in the picker alongside the session update time. Allows quick previews
of what's in each session without opening it.
This commit is contained in:
CJ Winslow authored and Peter Steinberger committed 2026-01-20 16:36:51 +00:00
1 parent 14f56a4e18
commit 1d9d5b30ce
6 files changed
+90 -11

No files matched your search

+2
View File
@@ -65,6 +65,7 @@ export type GatewaySessionList = {
lastTo?: string;
lastAccountId?: string;
derivedTitle?: string;
lastMessagePreview?: string;
}>;
};
@@ -185,6 +186,7 @@ export class GatewayChatClient {
includeGlobal: opts?.includeGlobal,
includeUnknown: opts?.includeUnknown,
includeDerivedTitles: opts?.includeDerivedTitles,
includeLastMessage: opts?.includeLastMessage,
agentId: opts?.agentId,
});
}
+11 -2
View File
@@ -155,21 +155,30 @@ export function createCommandHandlers(context: CommandHandlerContext) {
includeGlobal: false,
includeUnknown: false,
includeDerivedTitles: true,
includeLastMessage: true,
agentId: state.currentAgentId,
});
const items = result.sessions.map((session) => {
const title = session.derivedTitle ?? session.displayName;
const formattedKey = formatSessionKey(session.key);
// Avoid redundant "title (key)" when title matches key
const label =
title && title !== formattedKey ? `${title} (${formattedKey})` : formattedKey;
// Build description: time + message preview
const timePart = session.updatedAt ? formatRelativeTime(session.updatedAt) : "";
const preview = session.lastMessagePreview?.replace(/\s+/g, " ").trim();
const description = preview ? `${timePart} · ${preview}` : timePart;
return {
value: session.key,
label: title ? `${title} (${formattedKey})` : formattedKey,
description: session.updatedAt ? formatRelativeTime(session.updatedAt) : "",
label,
description,
searchText: [
session.displayName,
session.label,
session.subject,
session.sessionId,
session.key,
session.lastMessagePreview,
]
.filter(Boolean)
.join(" "),