batchExtract method

List<MemoryCandidate> batchExtract(
  1. List<Map<String, dynamic>> sessionHistory, {
  2. List<String> existingMemories = const [],
})

Run extraction over an entire session history and return ranked, deduplicated candidates.

Implementation

List<MemoryCandidate> batchExtract(
  List<Map<String, dynamic>> sessionHistory, {
  List<String> existingMemories = const [],
}) {
  final all = <MemoryCandidate>[];

  for (final entry in sessionHistory) {
    final type = entry['type']?.toString();

    switch (type) {
      case 'message':
        final messages = entry['messages'];
        if (messages is List<Map<String, dynamic>>) {
          all.addAll(extractFromConversation(messages));
        }
      case 'tool_output':
        final tool = entry['tool']?.toString() ?? '';
        final output = entry['output']?.toString() ?? '';
        all.addAll(extractFromToolOutput(tool, output));
      case 'code_change':
        final diff = entry['diff']?.toString() ?? '';
        final desc = entry['description']?.toString() ?? '';
        all.addAll(extractFromCodeChange(diff, desc));
    }
  }

  final deduped = deduplicateMemories(all, existingMemories);
  return rankMemories(deduped);
}