run method

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

Run the command

Implementation

@override
Future<void> run() async {
  if (skillName == null || skillName!.isEmpty) {
    stderr.writeln('Error: Skill name is required');
    stderr.writeln('');
    stderr.writeln('Usage: boost skill:render <skill-name> [output-file]');
    exit(1);
  }

  try {
    // Load the skill
    final loader = SkillLoader(skillsPath: skillsPath);
    final skill = await loader.loadSkill(skillName!);

    if (skill == null) {
      stderr.writeln('Error: Skill "$skillName" not found');
      stderr.writeln('');
      stderr.writeln('Run "boost skill:list" to see available skills');
      exit(1);
    }

    // Detect ServerPod project for context
    final project = ServerPodLocator.getProject();
    if (project == null || !project.isValid) {
      stderr.writeln('Warning: Not a valid ServerPod project');
      stderr.writeln('Rendering with minimal context...');
      print('');

      final context = const ProjectContext(
        projectName: 'unknown',
        serverpodVersion: '3.2.3',
        rootPath: '.',
      );

      final renderer = TemplateRenderer(context: context);
      final rendered = renderer.render(skill.template, {});
      _outputRendered(rendered, outputPath);
      return;
    }

    // Build context from project
    final projectContext = ProjectContext.fromProject(project);

    // Render the template
    final renderer = TemplateRenderer(context: projectContext);
    final rendered = renderer.render(skill.template, {});

    _outputRendered(rendered, outputPath);
  } catch (e) {
    stderr.writeln('Error rendering skill: $e');
    exit(1);
  }
}