createRunCommandTool function

Tool<Object, ToolOptions, Object> createRunCommandTool({
  1. required CommandService commandService,
})

Implementation

Tool createRunCommandTool({
  required CommandService commandService,
}) {
  return Tool.fromFunction<RunCommandInput, String>(
    name: 'run_command',
    description:
        'Execute common Dart/Flutter pub commands for project maintenance. '
        'Available commands: '
        'pub_get (fetch dependencies), '
        'pub_upgrade (upgrade packages), '
        'pub_downgrade (downgrade packages), '
        'pub_outdated (check for updates), '
        'pub_remove (uninstall package), '
        'flutter_clean (clean build files). '
        'Use for maintenance tasks after installations or when troubleshooting dependency issues.',
    inputJsonSchema: object({
      'command': string().enumerated(
        PubCommand.values,
        nameTransformer: (name) {
          return name.replaceAllMapped(
            RegExp(r'[A-Z]'),
            (match) => '_${match.group(0)!.toLowerCase()}',
          );
        },
      ).meta(MetadataEntry(
        description: 'Command to run. Options:\n'
            '- pub_get: Fetch dependencies\n'
            '- pub_upgrade: Upgrade all or specific package\n'
            '- pub_downgrade: Downgrade all or specific package\n'
            '- pub_outdated: Check for outdated packages\n'
            '- pub_remove: Remove a package\n'
            '- flutter_clean: Clean Flutter build files',
      )),
      'package': string().meta(MetadataEntry(
        description:
            'Package name (required for pub_remove, optional for pub_upgrade/pub_downgrade)',
      )),
    }).optionals([
      'package',
    ]).toJsonSchema(),
    func: (input) async {
      final result = await commandService.executeCommand(
        command: input.command,
        package: input.package,
      );
      return result.message;
    },
    getInputFromJson: RunCommandInput.fromJson,
  );
}