Co-authored-by: Clément Drouin <clement.drouin@mistral.ai>
Co-authored-by: Clément Sirieix <clement.sirieix@mistral.ai>
Co-authored-by: Cyprien <courtot.c@gmail.com>
Co-authored-by: Guillaume LE GOFF <guillaume.lgf@gmail.com>
Co-authored-by: Jean Burellier <sheplu@users.noreply.github.com>
Co-authored-by: Kim-Adeline Miguel <51720070+kimadeline@users.noreply.github.com>
Co-authored-by: Mathias Gesbert <mathias.gesbert@mistral.ai>
Co-authored-by: Nelson PROIA <144663685+Nelson-PROIA@users.noreply.github.com>
Co-authored-by: Paul VEZIA <166131032+le-codeur-rapide@users.noreply.github.com>
Co-authored-by: Pierre Rossinès <pierre.rossines@mistral.ai>
Co-authored-by: Quentin <quentin.torroba@mistral.ai>
Co-authored-by: Vincent G <10739306+VinceOPS@users.noreply.github.com>
Co-authored-by: josephine-delas <57808586+josephine-delas@users.noreply.github.com>
Co-authored-by: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
Laure Hugo 2026-06-25 16:08:45 +02:00 committed by GitHub
parent 725d3a56ce
commit e607ccbb00
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
242 changed files with 7372 additions and 1974 deletions

View file

@ -14,15 +14,8 @@ from vibe.core.trusted_folders import trusted_folders_manager
@pytest.fixture
def config() -> VibeConfig:
return build_test_vibe_config(
system_prompt_id="tests", include_project_context=False
)
@pytest.fixture
def skill_manager(config: VibeConfig) -> SkillManager:
return SkillManager(lambda: config)
def skill_manager(vibe_config: VibeConfig) -> SkillManager:
return SkillManager(lambda: vibe_config)
class TestSkillManagerDiscovery:
@ -39,11 +32,7 @@ class TestSkillManagerDiscovery:
def test_discovers_skill_from_skill_paths(self, skills_dir: Path) -> None:
create_skill(skills_dir, "test-skill", "A test skill")
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir],
)
config = build_test_vibe_config(skill_paths=[skills_dir])
manager = SkillManager(lambda: config)
assert "test-skill" in manager.available_skills
@ -54,11 +43,7 @@ class TestSkillManagerDiscovery:
create_skill(skills_dir, "skill-two", "Second skill")
create_skill(skills_dir, "skill-three", "Third skill")
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir],
)
config = build_test_vibe_config(skill_paths=[skills_dir])
manager = SkillManager(lambda: config)
assert len(manager.available_skills) == 3 + len(BUILTIN_SKILLS)
@ -75,11 +60,7 @@ class TestSkillManagerDiscovery:
# Create a valid skill
create_skill(skills_dir, "valid-skill", "A valid skill")
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir],
)
config = build_test_vibe_config(skill_paths=[skills_dir])
manager = SkillManager(lambda: config)
skills = manager.available_skills
@ -94,11 +75,7 @@ class TestSkillManagerDiscovery:
# Create a valid skill
create_skill(skills_dir, "valid-skill", "A valid skill")
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir],
)
config = build_test_vibe_config(skill_paths=[skills_dir])
manager = SkillManager(lambda: config)
skills = manager.available_skills
@ -118,11 +95,7 @@ class TestSkillManagerParsing:
allowed_tools="bash read",
)
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir],
)
config = build_test_vibe_config(skill_paths=[skills_dir])
manager = SkillManager(lambda: config)
skill = manager.get_skill("full-skill")
@ -137,11 +110,7 @@ class TestSkillManagerParsing:
def test_sets_correct_skill_path(self, skills_dir: Path) -> None:
create_skill(skills_dir, "test-skill", "A test skill")
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir],
)
config = build_test_vibe_config(skill_paths=[skills_dir])
manager = SkillManager(lambda: config)
skill = manager.get_skill("test-skill")
@ -158,11 +127,7 @@ class TestSkillManagerParsing:
# Create a valid skill
create_skill(skills_dir, "valid-skill", "A valid skill")
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir],
)
config = build_test_vibe_config(skill_paths=[skills_dir])
manager = SkillManager(lambda: config)
skills = manager.available_skills
@ -179,11 +144,7 @@ class TestSkillManagerParsing:
# Create a valid skill
create_skill(skills_dir, "valid-skill", "A valid skill")
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir],
)
config = build_test_vibe_config(skill_paths=[skills_dir])
manager = SkillManager(lambda: config)
skills = manager.available_skills
@ -200,9 +161,7 @@ class TestSkillManagerSearchPaths:
vibe_skills.mkdir(parents=True)
create_skill(vibe_skills, "vibe-skill", "Skill from .vibe/skills")
config = build_test_vibe_config(
system_prompt_id="tests", include_project_context=False, skill_paths=[]
)
config = build_test_vibe_config(skill_paths=[])
manager = SkillManager(lambda: config)
assert "vibe-skill" in manager.available_skills
@ -219,9 +178,7 @@ class TestSkillManagerSearchPaths:
agents_skills.mkdir(parents=True)
create_skill(agents_skills, "agents-skill", "Skill from .agents/skills")
config = build_test_vibe_config(
system_prompt_id="tests", include_project_context=False, skill_paths=[]
)
config = build_test_vibe_config(skill_paths=[])
manager = SkillManager(lambda: config)
assert "agents-skill" in manager.available_skills
@ -241,9 +198,7 @@ class TestSkillManagerSearchPaths:
create_skill(vibe_skills, "vibe-only", "From .vibe")
create_skill(agents_skills, "agents-only", "From .agents")
config = build_test_vibe_config(
system_prompt_id="tests", include_project_context=False, skill_paths=[]
)
config = build_test_vibe_config(skill_paths=[])
manager = SkillManager(lambda: config)
skills = manager.available_skills
@ -262,9 +217,7 @@ class TestSkillManagerSearchPaths:
create_skill(vibe_skills, "shared-skill", "First from .vibe")
create_skill(agents_skills, "shared-skill", "Second from .agents")
config = build_test_vibe_config(
system_prompt_id="tests", include_project_context=False, skill_paths=[]
)
config = build_test_vibe_config(skill_paths=[])
manager = SkillManager(lambda: config)
skills = manager.available_skills
@ -281,11 +234,7 @@ class TestSkillManagerSearchPaths:
skills_dir_2.mkdir()
create_skill(skills_dir_2, "skill-from-dir2", "Skill from directory 2")
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir_1, skills_dir_2],
)
config = build_test_vibe_config(skill_paths=[skills_dir_1, skills_dir_2])
manager = SkillManager(lambda: config)
skills = manager.available_skills
@ -303,11 +252,7 @@ class TestSkillManagerSearchPaths:
skills_dir_2.mkdir()
create_skill(skills_dir_2, "duplicate-skill", "Second version")
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir_1, skills_dir_2],
)
config = build_test_vibe_config(skill_paths=[skills_dir_1, skills_dir_2])
manager = SkillManager(lambda: config)
skills = manager.available_skills
@ -320,9 +265,7 @@ class TestSkillManagerSearchPaths:
create_skill(skills_dir, "valid-skill", "A valid skill")
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir, tmp_path / "nonexistent"],
skill_paths=[skills_dir, tmp_path / "nonexistent"]
)
manager = SkillManager(lambda: config)
@ -335,11 +278,7 @@ class TestSkillManagerGetSkill:
def test_returns_skill_by_name(self, skills_dir: Path) -> None:
create_skill(skills_dir, "test-skill", "A test skill")
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir],
)
config = build_test_vibe_config(skill_paths=[skills_dir])
manager = SkillManager(lambda: config)
skill = manager.get_skill("test-skill")
@ -357,10 +296,7 @@ class TestSkillManagerFiltering:
create_skill(skills_dir, "skill-c", "Skill C")
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir],
enabled_skills=["skill-a", "skill-c"],
skill_paths=[skills_dir], enabled_skills=["skill-a", "skill-c"]
)
manager = SkillManager(lambda: config)
@ -376,10 +312,7 @@ class TestSkillManagerFiltering:
create_skill(skills_dir, "skill-c", "Skill C")
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir],
disabled_skills=["skill-b"],
skill_paths=[skills_dir], disabled_skills=["skill-b"]
)
manager = SkillManager(lambda: config)
@ -396,8 +329,6 @@ class TestSkillManagerFiltering:
create_skill(skills_dir, "skill-b", "Skill B")
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir],
enabled_skills=["skill-a"],
disabled_skills=["skill-a"], # Should be ignored
@ -414,10 +345,7 @@ class TestSkillManagerFiltering:
create_skill(skills_dir, "other-skill", "Other skill")
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir],
enabled_skills=["search-*"],
skill_paths=[skills_dir], enabled_skills=["search-*"]
)
manager = SkillManager(lambda: config)
@ -433,10 +361,7 @@ class TestSkillManagerFiltering:
create_skill(skills_dir, "other-skill", "Other skill")
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir],
enabled_skills=["re:skill-v\\d+"],
skill_paths=[skills_dir], enabled_skills=["re:skill-v\\d+"]
)
manager = SkillManager(lambda: config)
@ -451,10 +376,7 @@ class TestSkillManagerFiltering:
create_skill(skills_dir, "disabled-skill", "Disabled")
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir],
disabled_skills=["disabled-skill"],
skill_paths=[skills_dir], disabled_skills=["disabled-skill"]
)
manager = SkillManager(lambda: config)
@ -466,11 +388,7 @@ class TestSkillUserInvocable:
def test_user_invocable_defaults_to_true(self, skills_dir: Path) -> None:
create_skill(skills_dir, "default-skill", "A default skill")
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir],
)
config = build_test_vibe_config(skill_paths=[skills_dir])
manager = SkillManager(lambda: config)
skill = manager.get_skill("default-skill")
@ -480,11 +398,7 @@ class TestSkillUserInvocable:
def test_user_invocable_can_be_set_to_false(self, skills_dir: Path) -> None:
create_skill(skills_dir, "hidden-skill", "A hidden skill", user_invocable=False)
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir],
)
config = build_test_vibe_config(skill_paths=[skills_dir])
manager = SkillManager(lambda: config)
skill = manager.get_skill("hidden-skill")
@ -498,11 +412,7 @@ class TestSkillUserInvocable:
skills_dir, "explicit-skill", "An explicit skill", user_invocable=True
)
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir],
)
config = build_test_vibe_config(skill_paths=[skills_dir])
manager = SkillManager(lambda: config)
skill = manager.get_skill("explicit-skill")
@ -514,11 +424,7 @@ class TestSkillUserInvocable:
create_skill(skills_dir, "hidden-skill", "Hidden", user_invocable=False)
create_skill(skills_dir, "default-skill", "Default")
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir],
)
config = build_test_vibe_config(skill_paths=[skills_dir])
manager = SkillManager(lambda: config)
skills = manager.available_skills
@ -576,11 +482,7 @@ class TestSkillManagerConfigIssues:
broken_dir.mkdir()
(broken_dir / "SKILL.md").write_text("No frontmatter here")
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir],
)
config = build_test_vibe_config(skill_paths=[skills_dir])
manager = SkillManager(lambda: config)
assert len(manager.config_issues) == 1
@ -597,11 +499,7 @@ class TestSkillManagerConfigIssues:
(broken_dir / "SKILL.md").write_text("not valid")
create_skill(skills_dir, "good-skill", "Works fine")
config = build_test_vibe_config(
system_prompt_id="tests",
include_project_context=False,
skill_paths=[skills_dir],
)
config = build_test_vibe_config(skill_paths=[skills_dir])
manager = SkillManager(lambda: config)
assert {