( frontmatter: FrontmatterData, markdownContent: string, resolvedName: string, descriptionFallbackLabel: 'Skill' | 'Custom command' = 'Skill', )
| 183 | * source/loadedFrom/baseDir/paths fields separately. |
| 184 | */ |
| 185 | export function parseSkillFrontmatterFields( |
| 186 | frontmatter: FrontmatterData, |
| 187 | markdownContent: string, |
| 188 | resolvedName: string, |
| 189 | descriptionFallbackLabel: 'Skill' | 'Custom command' = 'Skill', |
| 190 | ): { |
| 191 | displayName: string | undefined |
| 192 | description: string |
| 193 | hasUserSpecifiedDescription: boolean |
| 194 | allowedTools: string[] |
| 195 | argumentHint: string | undefined |
| 196 | argumentNames: string[] |
| 197 | whenToUse: string | undefined |
| 198 | version: string | undefined |
| 199 | model: ReturnType<typeof parseUserSpecifiedModel> | undefined |
| 200 | disableModelInvocation: boolean |
| 201 | userInvocable: boolean |
| 202 | hooks: HooksSettings | undefined |
| 203 | executionContext: 'fork' | undefined |
| 204 | agent: string | undefined |
| 205 | effort: EffortValue | undefined |
| 206 | shell: FrontmatterShell | undefined |
| 207 | } { |
| 208 | const validatedDescription = coerceDescriptionToString( |
| 209 | frontmatter.description, |
| 210 | resolvedName, |
| 211 | ) |
| 212 | const description = |
| 213 | validatedDescription ?? |
| 214 | extractDescriptionFromMarkdown(markdownContent, descriptionFallbackLabel) |
| 215 | |
| 216 | const userInvocable = |
| 217 | frontmatter['user-invocable'] === undefined |
| 218 | ? true |
| 219 | : parseBooleanFrontmatter(frontmatter['user-invocable']) |
| 220 | |
| 221 | const model = |
| 222 | frontmatter.model === 'inherit' |
| 223 | ? undefined |
| 224 | : frontmatter.model |
| 225 | ? parseUserSpecifiedModel(frontmatter.model as string) |
| 226 | : undefined |
| 227 | |
| 228 | const effortRaw = frontmatter['effort'] |
| 229 | const effort = |
| 230 | effortRaw !== undefined ? parseEffortValue(effortRaw) : undefined |
| 231 | if (effortRaw !== undefined && effort === undefined) { |
| 232 | logForDebugging( |
| 233 | `Skill ${resolvedName} has invalid effort '${effortRaw}'. Valid options: ${EFFORT_LEVELS.join(', ')} or an integer`, |
| 234 | ) |
| 235 | } |
| 236 | |
| 237 | return { |
| 238 | displayName: |
| 239 | frontmatter.name != null ? String(frontmatter.name) : undefined, |
| 240 | description, |
| 241 | hasUserSpecifiedDescription: validatedDescription !== null, |
| 242 | allowedTools: parseSlashCommandToolsFromFrontmatter( |
no test coverage detected