run method

  1. @override
void run()
override

Runs this command.

The return value is wrapped in a Future if necessary and returned by CommandRunner.runCommand.

Implementation

@override
void run() {
  if (!ContextService.isInitialized()) {
    print('ContextForge has not been initialized.\nRun: contextforge init');
    return;
  }

  if (argResults?.rest.isEmpty ?? true) {
    print('Error: Task ID is required.\nUsage: contextforge task done <task-id>');
    return;
  }

  final taskId = argResults!.rest[0];
  ContextService.ensureDataFilesExist();

  final features = ContextService.loadAllFeatures();
  final taskIndex = features.indexWhere((f) => f.id == taskId);

  if (taskIndex == -1) {
    print('Error: Task "$taskId" not found.');
    return;
  }

  final task = features[taskIndex];
  if (task.status == 'completed' || task.status == 'done') {
    print('Task "${task.title}" is already completed.');
    return;
  }

  features[taskIndex] = Feature(
    id: task.id,
    title: task.title,
    status: 'completed',
    description: task.description,
    files: task.files,
    detailFile: task.detailFile,
  );

  ContextService.saveFeatures(features);
  print('✔ Task "${task.title}" marked as completed');
}