executeImpl method

  1. @override
Future executeImpl(
  1. Map<String, dynamic> params
)
override

Implement the actual tool logic

params are the validated parameters (never null here) Returns the result data to send in the response

Implementation

@override
Future<dynamic> executeImpl(Map<String, dynamic> params) async {
  final categoryFilter = params['category'] as String?;
  final searchTerm = params['search'] as String?;
  final sourceFilter = params['source'] as String? ?? 'all';

  // Load built-in skills from serverpod_boost package
  final builtInSkillsPath = await _findBoostSkillsPath();
  final builtInSkills = builtInSkillsPath != null
      ? await _loadBuiltInSkills(Directory(builtInSkillsPath), categoryFilter, searchTerm)
      : <SkillInfo>[];

  // Load user's custom skills from .ai/skills directory
  final userSkillsDir = _findUserSkillsDirectory();
  final userSkills = userSkillsDir != null
      ? await _loadUserSkills(userSkillsDir, categoryFilter, searchTerm)
      : <SkillInfo>[];

  // Apply source filter
  List<SkillInfo> allSkills;
  switch (sourceFilter) {
    case 'built-in':
      allSkills = builtInSkills;
      break;
    case 'custom':
      allSkills = userSkills;
      break;
    default: // 'all'
      // Merge built-in and custom, built-in first
      allSkills = [...builtInSkills, ...userSkills];
  }

  // Group by category
  final categories = <String, int>{};
  for (final skill in allSkills) {
    categories[skill.category] = (categories[skill.category] ?? 0) + 1;
  }

  return {
    'skills': allSkills.map((s) => s.toJson()).toList(),
    'count': allSkills.length,
    'builtInCount': builtInSkills.length,
    'userCount': userSkills.length,
    'categories': categories,
    if (builtInSkillsPath != null) 'builtInSkillsPath': builtInSkillsPath,
    if (userSkillsDir != null) 'userSkillsPath': userSkillsDir.path,
  };
}