Skip to content

Commit 2aa8ea8

Browse files
Max_ProMax_Pro
authored andcommitted
feat(session-manager): display session title in session list
- Add title field to SessionInfo type - Pass full SessionMetadata to formatSessionList instead of just IDs - Add Title column to session list output - Fix: title was previously read from metadata but discarded before display
1 parent 8159185 commit 2aa8ea8

File tree

4 files changed

+21
-13
lines changed

4 files changed

+21
-13
lines changed

src/tools/session-manager/tools.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,18 @@ export const session_list: ToolDefinition = tool({
3838
try {
3939
const directory = args.project_path ?? process.cwd()
4040
let sessions = await getMainSessions({ directory })
41-
let sessionIDs = sessions.map((s) => s.id)
4241

4342
if (args.from_date || args.to_date) {
44-
sessionIDs = await filterSessionsByDate(sessionIDs, args.from_date, args.to_date)
43+
const filteredIDs = await filterSessionsByDate(sessions.map((s) => s.id), args.from_date, args.to_date)
44+
const filteredSet = new Set(filteredIDs)
45+
sessions = sessions.filter((s) => filteredSet.has(s.id))
4546
}
4647

4748
if (args.limit && args.limit > 0) {
48-
sessionIDs = sessionIDs.slice(0, args.limit)
49+
sessions = sessions.slice(0, args.limit)
4950
}
5051

51-
return await formatSessionList(sessionIDs)
52+
return await formatSessionList(sessions)
5253
} catch (e) {
5354
return `Error: ${e instanceof Error ? e.message : String(e)}`
5455
}

src/tools/session-manager/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export interface MessagePart {
2323

2424
export interface SessionInfo {
2525
id: string
26+
title?: string
2627
message_count: number
2728
first_message?: Date
2829
last_message?: Date

src/tools/session-manager/utils.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ import {
77
filterSessionsByDate,
88
searchInSession,
99
} from "./utils"
10-
import type { SessionInfo, SessionMessage, SearchResult } from "./types"
10+
import type { SessionInfo, SessionMessage, SearchResult, SessionMetadata } from "./types"
1111

1212
describe("session-manager utils", () => {
1313
test("formatSessionList handles empty array", async () => {
1414
// #given
15-
const sessions: string[] = []
15+
const sessions: SessionMetadata[] = []
1616

1717
// #when
1818
const result = await formatSessionList(sessions)

src/tools/session-manager/utils.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,28 @@
1-
import type { SessionInfo, SessionMessage, SearchResult } from "./types"
1+
import type { SessionInfo, SessionMessage, SearchResult, SessionMetadata } from "./types"
22
import { getSessionInfo, readSessionMessages } from "./storage"
33

4-
export async function formatSessionList(sessionIDs: string[]): Promise<string> {
5-
if (sessionIDs.length === 0) {
4+
export async function formatSessionList(sessions: SessionMetadata[]): Promise<string> {
5+
if (sessions.length === 0) {
66
return "No sessions found."
77
}
88

9-
const infos = (await Promise.all(sessionIDs.map((id) => getSessionInfo(id)))).filter(
10-
(info): info is SessionInfo => info !== null
11-
)
9+
const infos: SessionInfo[] = []
10+
for (const meta of sessions) {
11+
const info = await getSessionInfo(meta.id)
12+
if (info) {
13+
info.title = meta.title
14+
infos.push(info)
15+
}
16+
}
1217

1318
if (infos.length === 0) {
1419
return "No valid sessions found."
1520
}
1621

17-
const headers = ["Session ID", "Messages", "First", "Last", "Agents"]
22+
const headers = ["Session ID", "Title", "Messages", "First", "Last", "Agents"]
1823
const rows = infos.map((info) => [
1924
info.id,
25+
info.title ?? "(untitled)",
2026
info.message_count.toString(),
2127
info.first_message?.toISOString().split("T")[0] ?? "N/A",
2228
info.last_message?.toISOString().split("T")[0] ?? "N/A",

0 commit comments

Comments
 (0)