| 31 | |
| 32 | func (p *PromptProcessor) Process(skill SkillSpec, args, sessionID string, approveProjectShell func(SkillShellPermissionRequest) bool) (string, error) { |
| 33 | if skill.Content == nil { |
| 34 | return "", fmt.Errorf("Skill content must be loaded before processing") |
| 35 | } |
| 36 | content := *skill.Content |
| 37 | if skill.Directory != "" { |
| 38 | content = "Base directory for this skill: " + skill.Directory + "\n\n" + content |
| 39 | } |
| 40 | content = p.substituteArguments(content, args, skill.Frontmatter.Arguments, skill.Frontmatter.ArgumentHint) |
| 41 | content = p.substituteEnvVars(content, skill.Directory, sessionID, skill.Source) |
| 42 | return p.executeInlineShell(content, skill, approveProjectShell) |
| 43 | } |
| 44 | |
| 45 | func (p *PromptProcessor) substituteArguments(content, args string, namedArgs []string, argumentHint *string) string { |
| 46 | rawArgs := strings.TrimSpace(args) |
| 47 | var argv []string |