(skillFilePath: string)
| 338 | * fields and relies on validation having already happened upstream. |
| 339 | */ |
| 340 | export function parseSkillManifest(skillFilePath: string): GbrainManifest | null { |
| 341 | if (!existsSync(skillFilePath)) return null; |
| 342 | const content = readFileSync(skillFilePath, "utf-8"); |
| 343 | const frontmatter = extractFrontmatter(content); |
| 344 | if (!frontmatter) return null; |
| 345 | const gbrain = extractGbrainBlock(frontmatter); |
| 346 | if (!gbrain) return null; |
| 347 | return gbrain; |
| 348 | } |
| 349 | |
| 350 | function extractFrontmatter(content: string): string | null { |
| 351 | // Supports both `---\n...\n---` (YAML) and `+++\n...\n+++` (TOML, rare). |
no test coverage detected