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 {
  if (!ContextService.isInitialized()) {
    print('ContextForge has not been initialized.\nRun: contextforge init');
    return;
  }

  ContextService.ensureDataFilesExist();

  // Prompt for decision details
  stdout.write('Decision ID: ');
  var id = stdin.readLineSync() ?? '';
  id = id.trim();
  if (id.isEmpty) {
    print('Decision ID cannot be empty.');
    return;
  }

  stdout.write('Decision title: ');
  final title = stdin.readLineSync() ?? '';
  if (title.isEmpty) {
    print('Decision title cannot be empty.');
    return;
  }

  stdout.write('Short description: ');
  final description = stdin.readLineSync() ?? '';

  stdout.write('Choice made: ');
  final choice = stdin.readLineSync() ?? '';

  stdout.write('Reason: ');
  final reason = stdin.readLineSync() ?? '';

  // Load existing decisions to check count
  final decisions = ContextService.loadDecisions();

  // Check for duplicate ID
  if (decisions.any((d) => d.id == id)) {
    print('Decision with ID "$id" already exists.');
    return;
  }

  final detailFile = 'decisions/$id.md';
  final decisionMarkdownPath = '.contextforge/data/decisions/$id.md';

  // Ensure decisions directory exists
  try {
    Directory('.contextforge/data/decisions').createSync(recursive: true);
  } catch (e) {
    print('Error creating decisions directory: $e');
    return;
  }

  // Create markdown file with template
  final markdownContent = _createMarkdownTemplate(title, description, choice, reason);
  try {
    File(decisionMarkdownPath).writeAsStringSync(markdownContent);
  } catch (e) {
    print('Error creating decision file: $e');
    return;
  }

  // Check if we should add to YAML (only if < 5 entries)

    // Create decision
    final decision = Decision(
      id: id,
      title: title,
      reason: reason,
      alternatives: [],
      description: description,
      choice: choice,
      detailFile: detailFile,
    );

    // Add and save
    decisions.add(decision);
    ContextService.saveDecisions(decisions);
    print('✔ Decision "$title" added successfully (ID: $id)');

}