Co-Authored-By: Quentin Torroba <quentin.torroba@mistral.ai> Co-Authored-By: Michel Thomazo <michel.thomazo@mistral.ai> Co-Authored-By: Clément Drouin <clement.drouin@mistral.ai> Co-Authored-By: Vincent Guilloux <vincent.guilloux@mistral.ai> Co-Authored-By: Clément Siriex <clement.sirieix@mistral.ai> Co-Authored-By: Kim-Adeline Miguel <kimadeline.miguel@mistral.ai> Co-Authored-By: Thaddee Tyl <thaddee.tyl@gmail.com> Co-Authored-By: David Brochart <david.brochart@gmail.com> Co-Authored-By: Joseph Guhlin <joseph.guhlin@gmail.com> Co-Authored-By: Thomas Kenbeek <thomaskenbeek@gmail.com> Co-Authored-By: Remenby31 <baptiste.cruvellier31@gmail.com>
62 lines
1.7 KiB
Python
62 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
import yaml
|
|
|
|
from vibe.core.config import SessionLoggingConfig, VibeConfig
|
|
|
|
|
|
@pytest.fixture
|
|
def skills_dir(tmp_path: Path) -> Path:
|
|
"""Create a temporary skills directory."""
|
|
skills = tmp_path / "skills"
|
|
skills.mkdir()
|
|
return skills
|
|
|
|
|
|
@pytest.fixture
|
|
def skill_config(skills_dir: Path) -> VibeConfig:
|
|
return VibeConfig(
|
|
session_logging=SessionLoggingConfig(enabled=False),
|
|
system_prompt_id="tests",
|
|
include_project_context=False,
|
|
skill_paths=[skills_dir],
|
|
)
|
|
|
|
|
|
def create_skill(
|
|
skills_dir: Path,
|
|
name: str,
|
|
description: str = "A test skill",
|
|
*,
|
|
license: str | None = None,
|
|
compatibility: str | None = None,
|
|
metadata: dict[str, str] | None = None,
|
|
allowed_tools: str | None = None,
|
|
user_invocable: bool | None = None,
|
|
body: str = "## Instructions\n\nTest instructions here.",
|
|
) -> Path:
|
|
skill_dir = skills_dir / name
|
|
skill_dir.mkdir(parents=True, exist_ok=True)
|
|
|
|
frontmatter: dict[str, object] = {"name": name, "description": description}
|
|
if license:
|
|
frontmatter["license"] = license
|
|
if compatibility:
|
|
frontmatter["compatibility"] = compatibility
|
|
if metadata:
|
|
frontmatter["metadata"] = metadata
|
|
if allowed_tools:
|
|
frontmatter["allowed-tools"] = allowed_tools
|
|
if user_invocable is not None:
|
|
frontmatter["user-invocable"] = user_invocable
|
|
|
|
yaml_str = yaml.dump(frontmatter, default_flow_style=False, allow_unicode=True)
|
|
content = f"---\n{yaml_str}---\n\n{body}"
|
|
|
|
skill_file = skill_dir / "SKILL.md"
|
|
skill_file.write_text(content, encoding="utf-8")
|
|
|
|
return skill_dir
|