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

1"""内置技能 — 随 merco 包分发,安装时复制到用户全局 skills 目录""" 

2 

3import os 

4import shutil 

5from pathlib import Path 

6 

7_BUILTIN_DIR = Path(__file__).resolve().parent 

8_INSTALL_TARGETS = [ 

9 os.path.expanduser("~/.config/merco/skills"), 

10 os.path.expanduser("~/.merco/skills"), 

11] 

12 

13 

14def install_builtin_skills(force: bool = False) -> list[str]: 

15 """将内置技能复制到用户全局 skills 目录。返回已安装的技能名列表。 

16 

17 - 如果目标已存在同名技能且未传 force=True,则跳过 

18 - 默认安装到 ~/.config/merco/skills/ 

19 """ 

20 installed: list[str] = [] 

21 target = _INSTALL_TARGETS[0] # 全局配置优先 

22 os.makedirs(target, exist_ok=True) 

23 

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 

30 

31 dest_dir = Path(target) / entry.name 

32 dest_file = dest_dir / "SKILL.md" 

33 

34 if not force and dest_file.exists(): 

35 continue 

36 

37 # 目录可能含子文件(如 references/),整目录覆盖 

38 if dest_dir.exists(): 

39 shutil.rmtree(dest_dir) 

40 shutil.copytree(entry, dest_dir) 

41 installed.append(entry.name) 

42 

43 return installed 

44