"""路径与 Agent 目标定义。""" from __future__ import annotations from pathlib import Path HOME = Path.home() SKILLS_HOME = HOME / ".skills" SKILLS_DIR = SKILLS_HOME / "skills" TEMPLATE_DIR = SKILLS_DIR / "_template" REGISTRY_FILE = SKILLS_HOME / "registry.yaml" EXTERNALS_DIR = HOME / ".local" / "share" / "skills" / "externals" PROJECT_MANIFEST = ".skills.yaml" AGENT_GLOBAL: dict[str, Path] = { "cursor": HOME / ".cursor" / "skills", "claude": HOME / ".claude" / "skills", "codex": HOME / ".codex" / "skills", } AGENT_PROJECT: dict[str, str] = { "cursor": ".agents/skills", "claude": ".claude/skills", "codex": ".agents/skills", } ALL_TARGETS = ("cursor", "claude", "codex") def resolve_targets(target: str | None) -> list[str]: if target is None or target == "all": return list(ALL_TARGETS) if target not in ALL_TARGETS: raise ValueError(f"未知 target: {target!r},可选: {', '.join(ALL_TARGETS)}, all") return [target] def agent_skill_dir(target: str, *, project_root: Path | None = None) -> Path: if project_root is None: return AGENT_GLOBAL[target] return project_root / AGENT_PROJECT[target] def ensure_skills_home() -> None: if not SKILLS_HOME.is_dir(): raise SystemExit( f"~/.skills 未配置。请先运行: skiff setup " )