scanMemoryFiles function
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;
}