import pytest import yaml from conftest import example from hugin_core.translators import BlockRow, File, Json, Config, Tool, translate def frontmatter(data: bytes) -> tuple[dict, str, str]: text = data.decode() _, header, body = text.split("---\n", 2) return yaml.safe_load(header), header.splitlines()[0], body def test_skill_one_file_for_both(): package = example("pub-munin-nutzen/1.4.0") claude = translate(package, Tool.CLAUDE, Config()).operations opencode = translate(package, Tool.OPENCODE_1, Config()).operations assert claude == opencode assert [op.path for op in claude] == [ ".claude/skills/pub-munin-nutzen/SKILL.md", ".claude/skills/pub-munin-nutzen/referenz/beispiele.md", ] fields, header, body = frontmatter(claude[0].content) assert header == "# Verwaltet von Hugin (pub-munin-nutzen 1.4.0). Änderungen über hugin.intern." assert fields == {"name": "pub-munin-nutzen", "description": package.manifest.description_text, "license": "intern"} assert body.startswith("\n# Munin nutzen") def test_skill_with_additions(): package = example("pub-munin-nutzen/1.4.0") manifest = package.manifest.model_copy(update={"extra": { "claude": {"allowed-tools": ["mcp__munin__recall"], "paths": ["**/*.go"]}, "opencode": {"metadata": {"opencode/slash": True}}, }}) package = type(package)(manifest, package.files) fields, _, _ = frontmatter(translate(package, Tool.CLAUDE, Config()).operations[0].content) assert fields["metadata"] == {"opencode/slash": "True"} assert fields["allowed-tools"] == ["mcp__munin__recall"] def test_skill_without_claude_compatibility(): package = example("pub-munin-nutzen/1.4.0") ops = translate(package, Tool.OPENCODE_1, Config(opencode_reads_claude=False)).operations assert ops[0].path == ".opencode/skills/pub-munin-nutzen/SKILL.md" def test_rules(): package = example("pub-hausregeln/1.0.0") claude = translate(package, Tool.CLAUDE, Config()).operations assert claude[0].path == ".hugin/rules/pub-hausregeln.md" assert claude[0].content.startswith(b"