run method

  1. @override
Future<ToolResult> run(
  1. Map<String, dynamic> input
)
override

Executes the tool with the given input map.

Should never throw — return ToolResult.failure on errors.

Implementation

@override
Future<ToolResult> run(Map<String, dynamic> input) async {
  final taskName = (input['task_name'] as String? ?? '').trim();
  final delayS = (input['delay_seconds'] as num?)?.toInt() ?? 0;

  if (taskName.isEmpty) {
    return ToolResult.failure(name, '"task_name" must not be empty.');
  }

  final dueAt = DateTime.now().add(Duration(seconds: delayS));
  _scheduled[taskName] = dueAt;

  _logger.info('Scheduled "$taskName" in ${delayS}s (due: $dueAt)');

  if (delayS >= 0) {
    Future<void>.delayed(Duration(seconds: delayS), () {
      onTaskDue?.call(taskName, dueAt);
      _logger.info('Task due: "$taskName"');
    });
  }

  return ToolResult.success(
    name,
    'Task "$taskName" scheduled for $dueAt (in ${delayS}s).',
    metadata: {'task_name': taskName, 'due_at': dueAt.toIso8601String()},
  );
}