setupAgents method
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!');
}