diff --git a/src/hooks/useWorkspaceAggregators.ts b/src/hooks/useWorkspaceAggregators.ts index 52fa36fac..fe06c7948 100644 --- a/src/hooks/useWorkspaceAggregators.ts +++ b/src/hooks/useWorkspaceAggregators.ts @@ -31,7 +31,7 @@ export interface WorkspaceState { loading: boolean; cmuxMessages: CmuxMessage[]; currentModel: string; - lastUserMessageAt: number | null; // Timestamp of most recent user message (null if no user messages) + recencyTimestamp: number | null; // Timestamp for sorting: most recent user message, or compacted message if no user messages } /** @@ -69,14 +69,27 @@ export function useWorkspaceAggregators(workspaceMetadata: Map m.role === "user" && m.metadata?.timestamp); - const lastUserMessageAt = lastUserMsg?.metadata?.timestamp ?? null; + + let recencyTimestamp: number | null = null; + if (lastUserMsg?.metadata?.timestamp) { + recencyTimestamp = lastUserMsg.metadata.timestamp; + } else { + // No user messages - check for compacted messages + const lastCompactedMsg = [...messages] + .reverse() + .find((m) => m.metadata?.compacted === true && m.metadata?.timestamp); + if (lastCompactedMsg?.metadata?.timestamp) { + recencyTimestamp = lastCompactedMsg.metadata.timestamp; + } + } return { messages: aggregator.getDisplayedMessages(), @@ -85,7 +98,7 @@ export function useWorkspaceAggregators(workspaceMetadata: Map { const timestamps: Record = {}; for (const [id, state] of workspaceStates) { - if (state.lastUserMessageAt !== null) { - timestamps[id] = state.lastUserMessageAt; + if (state.recencyTimestamp !== null) { + timestamps[id] = state.recencyTimestamp; } } return timestamps;