diff --git a/src/specify_cli/integrations/kimi/__init__.py b/src/specify_cli/integrations/kimi/__init__.py index 2b3d409b6f..4517fac037 100644 --- a/src/specify_cli/integrations/kimi/__init__.py +++ b/src/specify_cli/integrations/kimi/__init__.py @@ -317,7 +317,7 @@ def _is_speckit_generated_skill(skill_dir: Path) -> bool: try: content = skill_file.read_text(encoding="utf-8") - except OSError: + except (OSError, UnicodeError): return False if not content.startswith("---"): diff --git a/tests/integrations/test_integration_kimi.py b/tests/integrations/test_integration_kimi.py index 48e4daa553..36cb30a15b 100644 --- a/tests/integrations/test_integration_kimi.py +++ b/tests/integrations/test_integration_kimi.py @@ -199,6 +199,24 @@ def test_teardown_preserves_user_skills_in_legacy_dir(self, tmp_path): assert user_skill.exists() + def test_teardown_preserves_non_utf8_user_skill(self, tmp_path): + i = get_integration("kimi") + + user_skill = ( + tmp_path + / ".kimi" + / "skills" + / "speckit-user-owned" + / "SKILL.md" + ) + user_skill.parent.mkdir(parents=True) + user_skill.write_bytes(b"\xff\xfe") + + m = IntegrationManifest("kimi", tmp_path) + i.teardown(tmp_path, m) + + assert user_skill.read_bytes() == b"\xff\xfe" + class TestKimiCommandInvocation: """Kimi dispatch must use the native ``/skill:`` slash command."""