From 93ccf2a2ac7ae5a008ee160e3ecf48689d104411 Mon Sep 17 00:00:00 2001 From: Moon Date: Sat, 28 Mar 2026 21:37:22 +0800 Subject: [PATCH] fix: parse multi-line YAML block scalars in frontmatter _parse_frontmatter used manual line splitting which only handled simple key: value pairs. Multi-line block scalars (|) returned only '|' as the value, dropping all subsequent indented lines. Replace with yaml.safe_load() to correctly parse all YAML syntax. Add pyyaml>=6.0 to requirements.txt. --- agents/s05_skill_loading.py | 10 +++++----- requirements.txt | 1 + 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/agents/s05_skill_loading.py b/agents/s05_skill_loading.py index 07e580e82..5207b167a 100644 --- a/agents/s05_skill_loading.py +++ b/agents/s05_skill_loading.py @@ -38,6 +38,7 @@ import os import re import subprocess +import yaml from pathlib import Path from anthropic import Anthropic @@ -75,11 +76,10 @@ def _parse_frontmatter(self, text: str) -> tuple: match = re.match(r"^---\n(.*?)\n---\n(.*)", text, re.DOTALL) if not match: return {}, text - meta = {} - for line in match.group(1).strip().splitlines(): - if ":" in line: - key, val = line.split(":", 1) - meta[key.strip()] = val.strip() + try: + meta = yaml.safe_load(match.group(1)) or {} + except yaml.YAMLError: + meta = {} return meta, match.group(2).strip() def get_descriptions(self) -> str: diff --git a/requirements.txt b/requirements.txt index 55f896d40..c27dfcc04 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ anthropic>=0.25.0 python-dotenv>=1.0.0 +pyyaml>=6.0 \ No newline at end of file