execute method
Execute the command.
Implementation
@override
Future<CommandResult> execute(String args, ToolUseContext context) async {
final conversation = getConversation();
if (conversation.isEmpty) {
return const TextCommandResult(
'Nothing to export — conversation is empty.',
);
}
final timestamp = DateTime.now()
.toIso8601String()
.replaceAll(':', '-')
.split('.')
.first;
final filename = args.trim().isNotEmpty
? args.trim()
: 'conversation-$timestamp.md';
final path = filename.startsWith('/')
? filename
: '${context.cwd}/$filename';
try {
final buffer = StringBuffer();
buffer.writeln('# Conversation Export');
buffer.writeln();
buffer.writeln('Exported: ${DateTime.now().toIso8601String()}');
buffer.writeln();
buffer.writeln('---');
buffer.writeln();
for (final msg in conversation) {
final role = msg['role'] ?? 'unknown';
final content = msg['content'] ?? '';
final roleLabel = role == 'user' ? 'User' : 'Assistant';
buffer.writeln('## $roleLabel');
buffer.writeln();
buffer.writeln(content);
buffer.writeln();
buffer.writeln('---');
buffer.writeln();
}
final file = File(path);
await file.writeAsString(buffer.toString());
return TextCommandResult('Conversation exported to: $path');
} catch (e) {
return TextCommandResult('Export failed: $e');
}
}