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