Introduce extractSessionMetadata() in a new session-metadata.ts module that extracts only what the list view needs from JSONL files: - messageCount: Uses shared countMessagesForLine() for exact parity - firstPrompt: First non-system-reminder user message, truncated to 200 chars - summary: Last type="summary" line's summary field - firstTimestamp/lastTimestamp: For duration computation Design goals: - Parser parity: Uses forEachJsonlLine() and countMessagesForLine() from session-parser.ts, ensuring list counts always match detail-view counts - No string building: Avoids JSON.stringify and markdown processing - 2-3x faster than full parse: Only captures metadata, skips content - Graceful degradation: Handles malformed lines identically to full parser This is the Tier 3 data source for JSONL-first session discovery. When neither the sessions-index.json nor the persistent cache has valid data, this function extracts fresh metadata from the file. Test coverage includes: - Output matches parseSessionContent().length on sample fixtures - Duration extraction from JSONL timestamps - firstPrompt extraction skips system-reminder content - Empty files return zero counts and empty strings Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
6.0 KiB
6.0 KiB