Skill Tracer
Skills › Scientific Agent Skills › autoskill › promote.py

promote.py

58 lines · skills/autoskill/scripts/promote.py at 5f2bc03

1import argparse
2import shutil
3import sys
4from pathlib import Path
5
6
7class PromoteError(Exception):
8 pass
9
11_KINDS = ("new-skills", "composition-recipes")
14def promote(proposed_path, skills_dir, name):
15 proposed_path = Path(proposed_path)
16 skills_dir = Path(skills_dir)
18 source = None
19 for kind in _KINDS:
20 candidate = proposed_path / kind / name
21 if candidate.is_dir():
22 source = candidate
23 break
24 if source is None:
25 raise PromoteError(f"proposed skill {name!r} not found under {proposed_path}")
27 target = skills_dir / name
28 if target.exists():
29 raise PromoteError(f"target {target} already exists")
31 shutil.move(str(source), str(target))
32 return target
35def main(argv=None):
36 parser = argparse.ArgumentParser(
37 prog="autoskill-promote",
38 description="Move a proposed skill from _proposed/<ts>/ into skills/",
39 )
40 parser.add_argument("--proposed", required=True,
41 help="path to the _proposed/<ts>/ directory")
42 parser.add_argument("--skills-dir", required=True,
43 help="path to skills/")
44 parser.add_argument("--name", required=True, help="skill name to promote")
45 args = parser.parse_args(argv)
47 try:
48 target = promote(args.proposed, args.skills_dir, args.name)
49 except PromoteError as e:
50 print(f"promote failed: {e}", file=sys.stderr)
51 return 1
53 print(f"promoted: {args.name} -> {target}")
54 return 0
57if __name__ == "__main__":
58 raise SystemExit(main())