Files
yao-meta-skill/tests/verify_skill_ir_paths.py
T
2026-06-16 03:12:10 +08:00

67 lines
2.6 KiB
Python

#!/usr/bin/env python3
import json
import shutil
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent
sys.path.insert(0, str(ROOT / "scripts"))
from skill_ir_paths import candidate_paths, find_skill_ir, find_skill_ir_path # noqa: E402
TMP = ROOT / "tests" / "tmp_skill_ir_paths"
def write_json(path: Path, payload: dict) -> None:
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(json.dumps(payload, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
def main() -> None:
shutil.rmtree(TMP, ignore_errors=True)
TMP.mkdir(parents=True, exist_ok=True)
root_ir, root_path = find_skill_ir(ROOT, "yao-meta-skill", require_schema=True)
assert root_path == "skill-ir/examples/yao-meta-skill.json", root_path
assert root_ir["schema_version"] == "2.0.0", root_ir
assert find_skill_ir_path(ROOT, "yao-meta-skill", require_schema=True) == root_path
preferred = TMP / "reports" / "skill-ir.json"
example = TMP / "skill-ir" / "examples" / "demo-skill.json"
write_json(preferred, {"schema_version": "2.0.0", "name": "reports-copy"})
write_json(example, {"schema_version": "2.0.0", "name": "example-copy"})
payload, source = find_skill_ir(TMP, "demo-skill", require_schema=True)
assert source == "reports/skill-ir.json", source
assert payload["name"] == "reports-copy", payload
preferred.unlink()
payload, source = find_skill_ir(TMP, "demo-skill", require_schema=True)
assert source == "skill-ir/examples/demo-skill.json", source
assert payload["name"] == "example-copy", payload
example.unlink()
write_json(TMP / "skill-ir" / "examples" / "zzz-extra.json", {"schema_version": "2.0.0", "name": "wildcard"})
payload, source = find_skill_ir(TMP, "missing-name", require_schema=True)
assert source == "skill-ir/examples/zzz-extra.json", source
assert payload["name"] == "wildcard", payload
(TMP / "skill-ir" / "examples" / "zzz-extra.json").unlink()
write_json(TMP / "reports" / "skill-ir.json", {"name": "no-schema"})
assert find_skill_ir_path(TMP, "demo-skill", require_schema=True, fallback_source="missing") == "missing"
assert find_skill_ir_path(TMP, "demo-skill", require_schema=False) == "reports/skill-ir.json"
paths = [str(path.relative_to(TMP)) for path in candidate_paths(TMP, "demo-skill")]
assert paths[:3] == [
"reports/skill-ir.json",
"skill-ir/examples/demo-skill.json",
"skill-ir/examples/tmp_skill_ir_paths.json",
], paths
print(json.dumps({"ok": True}, ensure_ascii=False, indent=2))
if __name__ == "__main__":
main()