(session: SessionFile)
| 39 | } |
| 40 | |
| 41 | function summarizeSession(session: SessionFile): { |
| 42 | id: string; |
| 43 | createdAt: string; |
| 44 | updatedAt: string; |
| 45 | messageCount: number; |
| 46 | preview: string; |
| 47 | } | null { |
| 48 | if (!session.id) { |
| 49 | return null; |
| 50 | } |
| 51 | const messages = session.messages ?? []; |
| 52 | const firstUser = messages.find((m) => m.role === "user"); |
| 53 | const preview = (firstUser?.content ?? "").trim().slice(0, 72) || "(empty)"; |
| 54 | return { |
| 55 | id: session.id, |
| 56 | createdAt: session.createdAt ?? session.updatedAt ?? "", |
| 57 | updatedAt: session.updatedAt ?? session.createdAt ?? "", |
| 58 | messageCount: messages.length, |
| 59 | preview, |
| 60 | }; |
| 61 | } |
| 62 | |
| 63 | function listSessionSummaries(): ReturnType<typeof summarizeSession>[] { |
| 64 | ensureSessionDir(); |
no outgoing calls
no test coverage detected