scanAllSessions function

Future<List<LiteSessionInfo>> scanAllSessions()

Scan all project directories using filesystem metadata only. Returns a list of session file info sorted by mtime descending.

Implementation

Future<List<LiteSessionInfo>> scanAllSessions() async {
  final projectsDir = Directory(getProjectsDir());
  if (!await projectsDir.exists()) return [];

  final allSessions = <LiteSessionInfo>[];

  await for (final entity in projectsDir.list()) {
    if (entity is! Directory) continue;

    try {
      await for (final file in entity.list()) {
        if (file is! File || !file.path.endsWith('.jsonl')) continue;

        final stat = await file.stat();
        final sessionId = p.basenameWithoutExtension(file.path);
        allSessions.add(
          LiteSessionInfo(
            sessionId: sessionId,
            path: file.path,
            mtimeMs: stat.modified.millisecondsSinceEpoch,
            size: stat.size,
          ),
        );
      }
    } catch (_) {
      // Skip inaccessible project directories.
    }
  }

  // Sort by mtime descending (most recent first).
  allSessions.sort((a, b) => b.mtimeMs.compareTo(a.mtimeMs));
  return allSessions;
}