run method

  1. @override
Future<void> run()
override

Runs this command.

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

Implementation

@override
Future<void> run() async {
  final planFile = File('.spectra/PLAN.md');
  if (!planFile.existsSync()) {
    logger.err('PLAN.md not found. Run `spectra plan` first.');
    return;
  }

  final content = planFile.readAsStringSync();
  final taskDocs = _parseTasks(content);

  if (taskDocs.isEmpty) {
    logger.warn('No tasks found in PLAN.md.');
    return;
  }

  final provider = await _llmService.getPreferredProvider();
  if (provider == null) {
    logger.err('No LLM provider configured.');
    return;
  }

  logger.info('Executing ${taskDocs.length} tasks using ${provider.name}...');

  for (final taskDoc in taskDocs) {
    await _executeTask(taskDoc, provider);
  }

  // Prune state if it gets too large
  _stateManager.pruneState();

  logger.success('All tasks executed successfully!');
}