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.isNotEmpty) {
    // Help for a specific command
    final cmd = registry.get(args.trim());
    if (cmd == null) {
      return TextCommandResult('Unknown command: /$args');
    }
    return TextCommandResult(
      '/${cmd.name} — ${cmd.command.description}'
      '${cmd.allAliases.isNotEmpty ? '\n  Aliases: ${cmd.allAliases.map((a) => "/$a").join(", ")}' : ''}'
      '${cmd.command.argumentHint != null ? '\n  Usage: /${cmd.name} ${cmd.command.argumentHint}' : ''}',
    );
  }

  // List all visible commands
  final commands = registry.visible;
  commands.sort((a, b) => a.name.compareTo(b.name));

  final buffer = StringBuffer();
  buffer.writeln('Available commands:');
  buffer.writeln();

  for (final cmd in commands) {
    final hint = cmd.command.argumentHint != null
        ? ' ${cmd.command.argumentHint}'
        : '';
    buffer.writeln('  /${cmd.name}$hint — ${cmd.command.description}');
  }

  buffer.writeln();
  buffer.writeln('Type /help <command> for more info on a specific command.');
  return TextCommandResult(buffer.toString());
}