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