a8efa5f359
- targets: cursor, claude, codex, agents (~/.agents/skills, .agents/skills) - agents dir covers OMP native discovery; drop omp/opencode targets - project-level agents/cursor/codex share .agents/skills via idempotent symlinks - migrate local state: remove ~/.config/opencode/skills links, reinstall into ~/.agents/skills
57 lines
1.8 KiB
Python
57 lines
1.8 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",
|
||
# agents 标准目录:OMP 原生 canonical(agents provider),cursor/codex 项目级同路径
|
||
"agents": HOME / ".agents" / "skills",
|
||
}
|
||
|
||
AGENT_PROJECT: dict[str, str] = {
|
||
"cursor": ".agents/skills",
|
||
"claude": ".claude/skills",
|
||
"codex": ".agents/skills",
|
||
# 与 cursor/codex 共用 .agents/skills;软链幂等,同路径只写一次
|
||
"agents": ".agents/skills",
|
||
}
|
||
|
||
ALL_TARGETS = ("cursor", "claude", "codex", "agents")
|
||
|
||
|
||
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"
|
||
)
|