extractFromMessage method
Extract potential memories from a conversation message.
Implementation
List<ExtractedMemory> extractFromMessage(
String message, {
String? sessionId,
}) {
final extracted = <ExtractedMemory>[];
final now = DateTime.now();
// Pattern: "always/never do X" — coding conventions.
final conventionPatterns = [
RegExp(
r'(?:always|never|prefer|avoid)\s+(?:use|using|do|doing)\s+(.+)',
caseSensitive: false,
),
RegExp(
r'(?:the|our)\s+(?:convention|standard|pattern|rule)\s+is\s+(.+)',
caseSensitive: false,
),
RegExp(
r'(?:we|you should)\s+(?:always|never)\s+(.+)',
caseSensitive: false,
),
];
for (final pattern in conventionPatterns) {
for (final match in pattern.allMatches(message)) {
extracted.add(
ExtractedMemory(
content: match.group(0)!.trim(),
source: 'auto_detected',
category: MemoryCategory.codingConventions,
confidence: 0.7,
sessionId: sessionId,
extractedAt: now,
),
);
}
}
// Pattern: build/run/test commands.
final commandPatterns = [
RegExp(
r'(?:run|build|test|deploy|install)\s+(?:with|using|via)\s+[`"]?(.+?)[`"]?$',
caseSensitive: false,
multiLine: true,
),
RegExp(
r'(?:use|run)\s+[`"](.+?)[`"]\s+to\s+(?:build|test|deploy)',
caseSensitive: false,
),
];
for (final pattern in commandPatterns) {
for (final match in pattern.allMatches(message)) {
extracted.add(
ExtractedMemory(
content: match.group(0)!.trim(),
source: 'auto_detected',
category: MemoryCategory.buildInstructions,
confidence: 0.6,
sessionId: sessionId,
extractedAt: now,
),
);
}
}
// Pattern: architecture/structure mentions.
final archPatterns = [
RegExp(
r'(?:the architecture|the structure|organized as|follows?\s+(?:MVC|MVVM|clean architecture|hexagonal))',
caseSensitive: false,
),
];
for (final pattern in archPatterns) {
for (final match in pattern.allMatches(message)) {
extracted.add(
ExtractedMemory(
content: match.group(0)!.trim(),
source: 'auto_detected',
category: MemoryCategory.architecture,
confidence: 0.5,
sessionId: sessionId,
extractedAt: now,
),
);
}
}
_extractedMemories.addAll(extracted);
for (final e in extracted) {
_eventController.add(MemoryExtracted(e));
}
return extracted;
}