execute method

  1. @override
Future<CommandResult> execute(
  1. String args,
  2. ToolUseContext context
)
override

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());
}