exportSession method

Future<String> exportSession(
  1. String sessionId, {
  2. String format = 'markdown',
})

Export a session's history.

Implementation

Future<String> exportSession(
  String sessionId, {
  String format = 'markdown', // 'markdown', 'json', 'text'
}) async {
  final entries = await getSessionHistory(sessionId);

  switch (format) {
    case 'json':
      return jsonEncode(entries.map((e) => e.toJson()).toList());

    case 'text':
      final buffer = StringBuffer();
      for (final e in entries) {
        buffer.writeln('[${e.timestamp}] ${e.role}: ${e.content}');
        buffer.writeln();
      }
      return buffer.toString();

    case 'markdown':
    default:
      final buffer = StringBuffer();
      buffer.writeln('# Session: $sessionId');
      buffer.writeln();

      for (final e in entries) {
        if (e.type == HistoryEntryType.message) {
          if (e.role == 'user') {
            buffer.writeln('## User');
            buffer.writeln(e.content);
          } else if (e.role == 'assistant') {
            buffer.writeln('## Assistant');
            buffer.writeln(e.content);
          }
        } else if (e.type == HistoryEntryType.toolUse) {
          buffer.writeln('### Tool: ${e.toolName}');
          buffer.writeln('```json');
          buffer.writeln(e.content);
          buffer.writeln('```');
        } else if (e.type == HistoryEntryType.toolResult) {
          buffer.writeln('#### Result');
          buffer.writeln('```');
          buffer.writeln(
            e.content.length > 500
                ? '${e.content.substring(0, 500)}...'
                : e.content,
          );
          buffer.writeln('```');
        }
        buffer.writeln();
      }

      return buffer.toString();
  }
}