diff --git a/src/services/worker/SearchManager.ts b/src/services/worker/SearchManager.ts index e4ca430e..45c7e2d7 100644 --- a/src/services/worker/SearchManager.ts +++ b/src/services/worker/SearchManager.ts @@ -180,15 +180,37 @@ export class SearchManager { logger.debug('SEARCH', 'ChromaDB returned semantic matches', { matchCount: chromaResults.ids.length }); if (chromaResults.ids.length > 0) { - // Step 2: Filter by recency (90 days) - const ninetyDaysAgo = Date.now() - SEARCH_CONSTANTS.RECENCY_WINDOW_MS; + // Step 2: Filter by date range + // Use user-provided dateRange if available, otherwise fall back to 90-day recency window + const { dateRange } = options; + let startEpoch: number | undefined; + let endEpoch: number | undefined; + + if (dateRange) { + if (dateRange.start) { + startEpoch = typeof dateRange.start === 'number' + ? dateRange.start + : new Date(dateRange.start).getTime(); + } + if (dateRange.end) { + endEpoch = typeof dateRange.end === 'number' + ? dateRange.end + : new Date(dateRange.end).getTime(); + } + } else { + // Default: 90-day recency window + startEpoch = Date.now() - SEARCH_CONSTANTS.RECENCY_WINDOW_MS; + } + const recentMetadata = chromaResults.metadatas.map((meta, idx) => ({ id: chromaResults.ids[idx], meta, - isRecent: meta && meta.created_at_epoch > ninetyDaysAgo + isRecent: meta && meta.created_at_epoch != null + && (!startEpoch || meta.created_at_epoch >= startEpoch) + && (!endEpoch || meta.created_at_epoch <= endEpoch) })).filter(item => item.isRecent); - logger.debug('SEARCH', 'Results within 90-day window', { count: recentMetadata.length }); + logger.debug('SEARCH', dateRange ? 'Results within user date range' : 'Results within 90-day window', { count: recentMetadata.length }); // Step 3: Categorize IDs by document type const obsIds: number[] = [];