manuallyExtract method

Future<ManualExtractionResult> manuallyExtract(
  1. List<SessionMessage> messages
)

Manually trigger session memory extraction, bypassing threshold checks.

Implementation

Future<ManualExtractionResult> manuallyExtract(
  List<SessionMessage> messages,
) async {
  if (messages.isEmpty) {
    return const ManualExtractionResult(
      success: false,
      error: 'No messages to summarize',
    );
  }

  state.value.markExtractionStarted();

  try {
    final setup = await _setupFile();
    final prompt = await buildSessionMemoryUpdatePrompt(
      setup.currentMemory,
      setup.memoryPath,
      loadPrompt,
    );

    await runExtractionAgent(
      prompt: prompt,
      memoryPath: setup.memoryPath,
      contextMessages: messages,
    );

    logEvent('tengu_session_memory_manual_extraction', {});

    state.value.recordExtractionTokenCount(
      tokenCountWithEstimation(messages),
    );

    _updateLastSummarizedMessageIdIfSafe(messages);

    return ManualExtractionResult(
      success: true,
      memoryPath: setup.memoryPath,
    );
  } catch (e) {
    return ManualExtractionResult(success: false, error: e.toString());
  } finally {
    state.value.markExtractionCompleted();
  }
}