scanMemoryFiles function

Future<List<MemoryHeader>> scanMemoryFiles(
  1. String memoryDir
)

Scan a memory directory for .md files (excluding MEMORY.md entrypoint). Returns headers sorted newest-first, capped at maxMemoryFiles.

Implementation

Future<List<MemoryHeader>> scanMemoryFiles(String memoryDir) async {
  final dir = Directory(memoryDir);
  if (!await dir.exists()) return const [];

  final headers = <MemoryHeader>[];

  await for (final entity in dir.list(recursive: true)) {
    if (entity is! File) continue;
    if (!entity.path.endsWith('.md')) continue;

    // Skip the entrypoint
    final filename = entity.path.split('/').last;
    if (filename == 'MEMORY.md') continue;

    try {
      final stat = await entity.stat();
      final content = await entity.readAsString();
      final frontmatter = parseFrontmatter(content);

      headers.add(
        MemoryHeader(
          filename: filename,
          filePath: entity.path,
          modified: stat.modified,
          description: frontmatter?.description,
          type: frontmatter?.type,
        ),
      );
    } catch (_) {
      // Skip unreadable files
    }

    if (headers.length >= maxMemoryFiles) break;
  }

  // Sort newest first
  headers.sort((a, b) => b.modified.compareTo(a.modified));
  return headers;
}