search method
Searches episodic memories whose content contains query tokens.
Results are ranked by: strength × recency × recall frequency.
Implementation
List<Memory> search(String query, {int maxResults = 10}) {
final tokens = _tokenise(query);
if (tokens.isEmpty) return [];
final scored = <MapEntry<Memory, double>>[];
for (final memory in _store.values) {
final score = _scoreMemory(memory, tokens);
if (score > 0.0) scored.add(MapEntry(memory, score));
}
scored.sort((a, b) => b.value.compareTo(a.value));
// Reinforce recalled memories
final results = scored.take(maxResults).map((e) {
e.key.reinforce(amount: 0.05);
return e.key;
}).toList();
_logger.debug(
'Episodic search "$query": ${results.length} result(s)');
return results;
}