增加uploads路径中的文件到skill扫描范围
This commit is contained in:
parent
dd0885b3a5
commit
c669b3bb24
|
|
@ -315,7 +315,7 @@ def get_skills_prompt_section() -> str:
|
||||||
Returns the <skill_system>...</skill_system> block listing all enabled skills,
|
Returns the <skill_system>...</skill_system> block listing all enabled skills,
|
||||||
suitable for injection into any agent's system prompt.
|
suitable for injection into any agent's system prompt.
|
||||||
"""
|
"""
|
||||||
skills = load_skills(enabled_only=True)
|
skills = load_skills(enabled_only=False) # Load all skills, we'll indicate enabled status in the prompt
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from src.config import get_app_config
|
from src.config import get_app_config
|
||||||
|
|
|
||||||
|
|
@ -161,8 +161,8 @@ class ExtensionsConfig(BaseModel):
|
||||||
"""
|
"""
|
||||||
skill_config = self.skills.get(skill_name)
|
skill_config = self.skills.get(skill_name)
|
||||||
if skill_config is None:
|
if skill_config is None:
|
||||||
# Default to enable for public & custom skill
|
# Default to enable for public/custom/uploads skills
|
||||||
return skill_category in ("public", "custom")
|
return skill_category in ("public", "custom", "uploads")
|
||||||
return skill_config.enabled
|
return skill_config.enabled
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,9 @@ from .parser import parse_skill_file
|
||||||
from .types import Skill
|
from .types import Skill
|
||||||
|
|
||||||
|
|
||||||
|
UPLOADS_SKILLS_PATH = Path("/mnt/user-data/uploads")
|
||||||
|
|
||||||
|
|
||||||
def get_skills_root_path() -> Path:
|
def get_skills_root_path() -> Path:
|
||||||
"""
|
"""
|
||||||
Get the root path of the skills directory.
|
Get the root path of the skills directory.
|
||||||
|
|
@ -22,7 +25,9 @@ def load_skills(skills_path: Path | None = None, use_config: bool = True, enable
|
||||||
"""
|
"""
|
||||||
Load all skills from the skills directory.
|
Load all skills from the skills directory.
|
||||||
|
|
||||||
Scans both public and custom skill directories, parsing SKILL.md files
|
Scans public/custom skill directories under the skills root, and also
|
||||||
|
scans user uploads skill directory in the virtual personal folder
|
||||||
|
(/mnt/user-data/uploads), parsing SKILL.md files
|
||||||
to extract metadata. The enabled state is determined by the skills_state_config.json file.
|
to extract metadata. The enabled state is determined by the skills_state_config.json file.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
|
@ -53,9 +58,15 @@ def load_skills(skills_path: Path | None = None, use_config: bool = True, enable
|
||||||
|
|
||||||
skills = []
|
skills = []
|
||||||
|
|
||||||
# Scan public and custom directories
|
# Scan public/custom directories under skills root, and uploads skills
|
||||||
for category in ["public", "custom"]:
|
# under the virtual personal folder.
|
||||||
category_path = skills_path / category
|
scan_targets: list[tuple[str, Path]] = [
|
||||||
|
("public", skills_path / "public"),
|
||||||
|
("custom", skills_path / "custom"),
|
||||||
|
("uploads", UPLOADS_SKILLS_PATH),
|
||||||
|
]
|
||||||
|
|
||||||
|
for category, category_path in scan_targets:
|
||||||
if not category_path.exists() or not category_path.is_dir():
|
if not category_path.exists() or not category_path.is_dir():
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ def parse_skill_file(skill_file: Path, category: str) -> Skill | None:
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
skill_file: Path to the SKILL.md file
|
skill_file: Path to the SKILL.md file
|
||||||
category: Category of the skill ('public' or 'custom')
|
category: Category of the skill ('public', 'custom', or 'uploads')
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Skill object if parsing succeeds, None otherwise
|
Skill object if parsing succeeds, None otherwise
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ class Skill:
|
||||||
license: str | None
|
license: str | None
|
||||||
skill_dir: Path
|
skill_dir: Path
|
||||||
skill_file: Path
|
skill_file: Path
|
||||||
category: str # 'public' or 'custom'
|
category: str # 'public', 'custom', or 'uploads'
|
||||||
enabled: bool = False # Whether this skill is enabled
|
enabled: bool = False # Whether this skill is enabled
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
|
@ -29,6 +29,8 @@ class Skill:
|
||||||
Returns:
|
Returns:
|
||||||
Full container path to the skill directory
|
Full container path to the skill directory
|
||||||
"""
|
"""
|
||||||
|
if self.category == "uploads":
|
||||||
|
return f"/mnt/user-data/uploads/{self.skill_dir.name}"
|
||||||
return f"{container_base_path}/{self.category}/{self.skill_dir.name}"
|
return f"{container_base_path}/{self.category}/{self.skill_dir.name}"
|
||||||
|
|
||||||
def get_container_file_path(self, container_base_path: str = "/mnt/skills") -> str:
|
def get_container_file_path(self, container_base_path: str = "/mnt/skills") -> str:
|
||||||
|
|
@ -41,6 +43,8 @@ class Skill:
|
||||||
Returns:
|
Returns:
|
||||||
Full container path to the skill's SKILL.md file
|
Full container path to the skill's SKILL.md file
|
||||||
"""
|
"""
|
||||||
|
if self.category == "uploads":
|
||||||
|
return f"/mnt/user-data/uploads/{self.skill_dir.name}/SKILL.md"
|
||||||
return f"{container_base_path}/{self.category}/{self.skill_dir.name}/SKILL.md"
|
return f"{container_base_path}/{self.category}/{self.skill_dir.name}/SKILL.md"
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
def __repr__(self) -> str:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue