From b2193304e96d35d292bb006c7d088abad5712fad Mon Sep 17 00:00:00 2001 From: Claude Date: Tue, 26 May 2026 01:06:32 +0000 Subject: [PATCH] Align a0/skill-lib parser with canonical skill-lib repo Updates the skill-lib seed source to the corrected universal.py already used in a0/.agents/skills: documents the extensions param and prunes skip-dirs during the tree walk. https://claude.ai/code/session_01GJKavx93UKecGB3Q4XyTHZ --- skill-lib/msdmd/parsers/universal.py | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/skill-lib/msdmd/parsers/universal.py b/skill-lib/msdmd/parsers/universal.py index 16a57bee..5e6268f0 100644 --- a/skill-lib/msdmd/parsers/universal.py +++ b/skill-lib/msdmd/parsers/universal.py @@ -12,7 +12,7 @@ parse_text(text, block_name, marker="#") -> list[dict] parse_file(path, block_name) -> list[dict] - walk_tree(root, block_name, *, skip=None) -> tuple[annotated, untested] + walk_tree(root, block_name, *, skip=None, extensions=None) -> tuple[annotated, untested] This module has zero non-stdlib dependencies and is safe to copy verbatim into any project that wants msdmd support. @@ -118,15 +118,25 @@ def walk_tree( if extensions is not None else set(_MARKERS.keys()) ) + + def iter_source_files(path: Path) -> Iterable[Path]: + if path.name in skip_set: + return + try: + children = sorted(path.iterdir()) + except OSError: + return + for child in children: + if child.is_dir(): + if child.name in skip_set: + continue + yield from iter_source_files(child) + elif child.is_file() and child.suffix.lower() in ext_set: + yield child + annotated: list[tuple[Path, list[dict]]] = [] untested: list[Path] = [] - for path in sorted(root.rglob("*")): - if not path.is_file(): - continue - if any(part in skip_set for part in path.parts): - continue - if path.suffix.lower() not in ext_set: - continue + for path in iter_source_files(root): entries = parse_file(path, block_name) if entries: annotated.append((path, entries))