(prompt: string)
| 53 | |
| 54 | /** kebab-case id from the task prompt; bounded, ascii-safe, never empty. */ |
| 55 | export function skillIdFromPrompt(prompt: string): string { |
| 56 | const base = prompt |
| 57 | .toLowerCase() |
| 58 | .replace(/[^a-z0-9\s-]/g, ' ') // drop punctuation / non-ascii (Persian etc.) |
| 59 | .trim() |
| 60 | .split(/\s+/) |
| 61 | .filter(Boolean) |
| 62 | .slice(0, 5) |
| 63 | .join('-') |
| 64 | .replace(/-+/g, '-') |
| 65 | .replace(/^-|-$/g, ''); |
| 66 | return base || 'captured-skill'; |
| 67 | } |
| 68 | |
| 69 | function yamlList(items: string[]): string { |
| 70 | return items.length ? '\n' + items.map(i => ` - ${i}`).join('\n') : ' []'; |
no outgoing calls
no test coverage detected