From 4b13e7eeb9b7ac6c9baa823f4d7e0af59fdf3d4f Mon Sep 17 00:00:00 2001 From: teernisse Date: Fri, 30 Jan 2026 09:25:44 -0500 Subject: [PATCH] Add session duration computation to discovery pipeline Extend SessionEntry with an optional duration field (milliseconds) computed from the delta between created and modified timestamps. The computeDuration helper handles missing or invalid dates gracefully, returning 0 for any edge case. This enables downstream UI to show how long each session lasted without additional API calls. Co-Authored-By: Claude Opus 4.5 --- src/server/services/session-discovery.ts | 10 ++++++++++ src/shared/types.ts | 1 + 2 files changed, 11 insertions(+) diff --git a/src/server/services/session-discovery.ts b/src/server/services/session-discovery.ts index 9264275..8189137 100644 --- a/src/server/services/session-discovery.ts +++ b/src/server/services/session-discovery.ts @@ -80,6 +80,7 @@ export async function discoverSessions( modified: entry.modified || "", messageCount: entry.messageCount || 0, path: resolved, + duration: computeDuration(entry.created, entry.modified), }); } } catch { @@ -102,3 +103,12 @@ export async function discoverSessions( return sessions; } + +function computeDuration(created?: string, modified?: string): number { + if (!created || !modified) return 0; + const createdMs = new Date(created).getTime(); + const modifiedMs = new Date(modified).getTime(); + if (isNaN(createdMs) || isNaN(modifiedMs)) return 0; + const diff = modifiedMs - createdMs; + return diff > 0 ? diff : 0; +} diff --git a/src/shared/types.ts b/src/shared/types.ts index f27a92a..0d2814d 100644 --- a/src/shared/types.ts +++ b/src/shared/types.ts @@ -28,6 +28,7 @@ export interface SessionEntry { modified: string; messageCount: number; path: string; + duration?: number; // Duration in milliseconds from first to last message } export interface SessionListResponse {