run method
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);
}
}