Coverage for merco/skills/builtin/__init__.py: 0%
24 statements
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-07 14:04 +0800
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-07 14:04 +0800
1"""内置技能 — 随 merco 包分发,安装时复制到用户全局 skills 目录"""
3import os
4import shutil
5from pathlib import Path
7_BUILTIN_DIR = Path(__file__).resolve().parent
8_INSTALL_TARGETS = [
9 os.path.expanduser("~/.config/merco/skills"),
10 os.path.expanduser("~/.merco/skills"),
11]
14def install_builtin_skills(force: bool = False) -> list[str]:
15 """将内置技能复制到用户全局 skills 目录。返回已安装的技能名列表。
17 - 如果目标已存在同名技能且未传 force=True,则跳过
18 - 默认安装到 ~/.config/merco/skills/
19 """
20 installed: list[str] = []
21 target = _INSTALL_TARGETS[0] # 全局配置优先
22 os.makedirs(target, exist_ok=True)
24 for entry in _BUILTIN_DIR.iterdir():
25 if not entry.is_dir() or entry.name.startswith("_") or entry.name.startswith("."):
26 continue
27 skill_file = entry / "SKILL.md"
28 if not skill_file.exists():
29 continue
31 dest_dir = Path(target) / entry.name
32 dest_file = dest_dir / "SKILL.md"
34 if not force and dest_file.exists():
35 continue
37 # 目录可能含子文件(如 references/),整目录覆盖
38 if dest_dir.exists():
39 shutil.rmtree(dest_dir)
40 shutil.copytree(entry, dest_dir)
41 installed.append(entry.name)
43 return installed