execute method
Execute the command.
Implementation
@override
Future<CommandResult> execute(String args, ToolUseContext context) async {
if (args.trim().isEmpty) {
if (_extraDirs.isEmpty) {
return const TextCommandResult(
'No additional directories added.\n'
'Usage: /add-dir <path> [<path> ...]',
);
}
final buffer = StringBuffer();
buffer.writeln('Additional working directories:');
for (final dir in _extraDirs) {
buffer.writeln(' $dir');
}
return TextCommandResult(buffer.toString());
}
final paths = args.trim().split(RegExp(r'\s+'));
final added = <String>[];
final errors = <String>[];
for (final path in paths) {
final resolved = _resolvePath(path, context.cwd);
final dir = Directory(resolved);
if (await dir.exists()) {
if (!_extraDirs.contains(resolved)) {
_extraDirs.add(resolved);
added.add(resolved);
} else {
errors.add('$path — already added');
}
} else {
errors.add('$path — directory not found');
}
}
final buffer = StringBuffer();
if (added.isNotEmpty) {
buffer.writeln(
'Added ${added.length} director${added.length == 1 ? 'y' : 'ies'}:',
);
for (final d in added) {
buffer.writeln(' $d');
}
}
if (errors.isNotEmpty) {
if (added.isNotEmpty) buffer.writeln();
buffer.writeln('Errors:');
for (final e in errors) {
buffer.writeln(' $e');
}
}
return TextCommandResult(buffer.toString());
}