setupAgents method

Future<void> setupAgents({
  1. List<String>? agentNames,
  2. bool all = false,
})

Prompts or processes selected agentNames (or all) and generates agent rule files.

Implementation

Future<void> setupAgents({
  List<String>? agentNames,
  bool all = false,
}) async {
  List<AgentProvider> selectedProviders;

  if (all) {
    selectedProviders = _providers;
  } else if (agentNames != null && agentNames.isNotEmpty) {
    final namesLower = agentNames.map((n) => n.toLowerCase()).toSet();
    selectedProviders = _providers.where((p) {
      final nameLower = p.name.toLowerCase();
      return namesLower.contains(nameLower) ||
          (nameLower.contains('github') && namesLower.contains('copilot')) ||
          (nameLower.contains('github') && namesLower.contains('github'));
    }).toList();

    if (selectedProviders.isEmpty) {
      _logger
          .warning('No matching agents found for: ${agentNames.join(', ')}');
      return;
    }
  } else {
    selectedProviders = _logger.chooseAny<AgentProvider>(
      'Select AI agents to configure:',
      choices: _providers,
      defaultValues: _providers,
      display: (provider) => '${provider.name} (${provider.targetDirectory})',
    );
  }

  if (selectedProviders.isEmpty) {
    _logger.warning('No AI agents selected. Operation canceled.');
    return;
  }

  _logger.info('Generating AI agent configurations...');

  ProjectConfig? projectConfig;
  try {
    final configService = locator<ConfigService>();
    await configService.load('project.yaml');
    final projectMap =
        configService.getValue<Map<String, dynamic>>('project');
    if (projectMap != null) {
      projectConfig = ProjectConfig.fromYamlMap(projectMap);
    }
  } catch (e) {
    _logger.info(
        'No project.yaml found or failed to parse. Using default rules.');
  }

  final rulesContent = _generateRulesContent(projectConfig);

  for (final provider in selectedProviders) {
    final progress = _logger.progress('Configuring ${provider.name}...');
    try {
      await provider.generate(rulesContent);
      progress.complete(
          'Successfully configured ${provider.name} in ${provider.targetDirectory}');
    } catch (e, stackTrace) {
      progress.fail('Failed to configure ${provider.name}: $e');
      _logger.error('Error details:', e, stackTrace);
    }
  }

  _logger.success('AI Agent configuration complete!');
}