loadMemoryFiles function

Future<List<MemoryFile>> loadMemoryFiles(
  1. String projectDir
)

Implementation

Future<List<MemoryFile>> loadMemoryFiles(String projectDir) async {
  final files = <MemoryFile>[];
  final home = Platform.environment['HOME'] ?? '';

  // 1. Project root NEOMAGE.md
  final projectMemory = File('$projectDir/NEOMAGE.md');
  if (projectMemory.existsSync()) {
    try {
      files.add(
        MemoryFile(
          path: projectMemory.path,
          content: projectMemory.readAsStringSync(),
          source: MemoryFileSource.projectRoot,
        ),
      );
    } catch (_) {}
  }

  // 2. .neomage/NEOMAGE.md in project
  final projectNeomageDir = File('$projectDir/.neomage/NEOMAGE.md');
  if (projectNeomageDir.existsSync()) {
    try {
      files.add(
        MemoryFile(
          path: projectNeomageDir.path,
          content: projectNeomageDir.readAsStringSync(),
          source: MemoryFileSource.projectRoot,
        ),
      );
    } catch (_) {}
  }

  // 3. Walk parent directories (up to 5 levels or home)
  var current = Directory(projectDir).parent;
  int depth = 0;
  while (depth < 5 && current.path != '/' && current.path != home) {
    final parentMemory = File('${current.path}/NEOMAGE.md');
    if (parentMemory.existsSync()) {
      try {
        files.add(
          MemoryFile(
            path: parentMemory.path,
            content: parentMemory.readAsStringSync(),
            source: MemoryFileSource.parentDir,
          ),
        );
      } catch (_) {}
    }
    current = current.parent;
    depth++;
  }

  // 4. User home NEOMAGE.md
  if (home.isNotEmpty) {
    final homeMemory = File('$home/NEOMAGE.md');
    if (homeMemory.existsSync()) {
      try {
        files.add(
          MemoryFile(
            path: homeMemory.path,
            content: homeMemory.readAsStringSync(),
            source: MemoryFileSource.userHome,
          ),
        );
      } catch (_) {}
    }

    // 5. Config dir
    final configMemory = File('$home/.neomage/NEOMAGE.md');
    if (configMemory.existsSync() &&
        !files.any((f) => f.path == configMemory.path)) {
      try {
        files.add(
          MemoryFile(
            path: configMemory.path,
            content: configMemory.readAsStringSync(),
            source: MemoryFileSource.configDir,
          ),
        );
      } catch (_) {}
    }
  }

  return files;
}