addCronTask function

Future<String> addCronTask({
  1. required String cron,
  2. required String prompt,
  3. required bool recurring,
  4. required bool durable,
  5. String? agentId,
  6. List<CronTask>? sessionTasks,
})

Append a task. Returns the generated id.

When durable is false the task is held in process memory only -- it fires on schedule this session but is never written to .neomage/scheduled_tasks.json.

Implementation

Future<String> addCronTask({
  required String cron,
  required String prompt,
  required bool recurring,
  required bool durable,
  String? agentId,
  List<CronTask>? sessionTasks,
}) async {
  // Short ID -- 8 hex chars.
  final random = Random.secure();
  final id = List.generate(
    8,
    (_) => random.nextInt(16).toRadixString(16),
  ).join();

  final task = CronTask(
    id: id,
    cron: cron,
    prompt: prompt,
    createdAt: DateTime.now().millisecondsSinceEpoch,
    recurring: recurring,
  );

  if (!durable) {
    final taskWithAgent = agentId != null
        ? task.copyWith(agentId: agentId, durable: false)
        : task.copyWith(durable: false);
    sessionTasks?.add(taskWithAgent);
    return id;
  }

  final tasks = await readCronTasks();
  tasks.add(task);
  await writeCronTasks(tasks);
  return id;
}