55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
"""路径与 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"
|
|
DRAFTS_DIR = SKILLS_HOME / ".drafts"
|
|
CATALOG_FILE = SKILLS_HOME / "catalog.yaml"
|
|
LEGACY_REGISTRY_FILE = SKILLS_HOME / "registry.yaml"
|
|
CATALOG_CACHE_DIR = HOME / ".local" / "share" / "skills" / "externals"
|
|
CONFIG_FILE = HOME / ".config" / "skiff" / "config.yaml"
|
|
SOURCES_DIR = HOME / ".local" / "share" / "skiff" / "sources"
|
|
PROJECT_MANIFEST = ".skills.yaml"
|
|
|
|
AGENT_GLOBAL: dict[str, Path] = {
|
|
"cursor": HOME / ".cursor" / "skills",
|
|
"claude": HOME / ".claude" / "skills",
|
|
"codex": HOME / ".codex" / "skills",
|
|
"opencode": HOME / ".config" / "opencode" / "skills",
|
|
}
|
|
|
|
AGENT_PROJECT: dict[str, str] = {
|
|
"cursor": ".agents/skills",
|
|
"claude": ".claude/skills",
|
|
"codex": ".agents/skills",
|
|
"opencode": ".opencode/skills",
|
|
}
|
|
|
|
ALL_TARGETS = ("cursor", "claude", "codex", "opencode")
|
|
|
|
|
|
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(
|
|
"~/.skills 不存在。请将 skills 仓库克隆到 ~/.skills"
|
|
)
|