Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 31 additions & 2 deletions tools/version_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
负责 Skill 文件的版本存档和回滚。

用法:
python version_manager.py --action backup --slug xiaomei --base-dir ./exes
python version_manager.py --action list --slug xiaomei --base-dir ./exes
python version_manager.py --action rollback --slug xiaomei --version v2 --base-dir ./exes
"""
Expand Down Expand Up @@ -47,6 +48,30 @@ def list_versions(skill_dir: Path) -> list:
return versions


def backup(skill_dir: Path) -> Path | None:
"""存档当前版本到 versions/{current_version}/"""
meta_path = skill_dir / "meta.json"
if not meta_path.exists():
print(f"错误:找不到 {meta_path},无法确定当前版本", file=sys.stderr)
return None

meta = json.loads(meta_path.read_text(encoding="utf-8"))
current_version = meta.get("version", "v1")

backup_dir = skill_dir / "versions" / current_version
backup_dir.mkdir(parents=True, exist_ok=True)

backed_up = []
for fname in ("SKILL.md", "memories.md", "persona.md"):
src = skill_dir / fname
if src.exists():
shutil.copy2(src, backup_dir / fname)
backed_up.append(fname)

print(f"已存档当前版本({current_version})到 {backup_dir},文件:{', '.join(backed_up) if backed_up else '无'}")
return backup_dir


def rollback(skill_dir: Path, target_version: str) -> bool:
"""回滚到指定版本"""
version_dir = skill_dir / "versions" / target_version
Expand Down Expand Up @@ -107,7 +132,7 @@ def cleanup_old_versions(skill_dir: Path, max_versions: int = MAX_VERSIONS):

def main():
parser = argparse.ArgumentParser(description="Skill 版本管理器")
parser.add_argument("--action", required=True, choices=["list", "rollback", "cleanup"])
parser.add_argument("--action", required=True, choices=["backup", "list", "rollback", "cleanup"])
parser.add_argument("--slug", required=True, help="前任 slug")
parser.add_argument("--version", help="目标版本号(rollback 时使用)")
parser.add_argument(
Expand All @@ -124,7 +149,11 @@ def main():
print(f"错误:找不到 Skill 目录 {skill_dir}", file=sys.stderr)
sys.exit(1)

if args.action == "list":
if args.action == "backup":
if backup(skill_dir) is None:
sys.exit(1)

elif args.action == "list":
versions = list_versions(skill_dir)
if not versions:
print(f"{args.slug} 暂无历史版本")
Expand Down