#!/usr/bin/env python3 """批次1效果信号:人审流转助手(只动 example_lesson 状态机)。 用法: list [--work-id N] [--status proposed|reviewing|promoted|rejected] review --by [--rationale ...] promote --by --target-type pattern|skill|tool --target-ref [--rationale ...] reject --by [--rationale ...] """ from __future__ import annotations import argparse import json import sys from pathlib import Path SCRIPT = Path(__file__).resolve().parent EVIDENCE = SCRIPT.parent / ".agent" / "skills" / "record-run-evidence" / "scripts" if str(EVIDENCE) not in sys.path: sys.path.insert(0, str(EVIDENCE)) from lesson_registry import ( # noqa: E402 list_lessons, promote, reject, start_review, ) def _print(payload) -> None: print(json.dumps(payload, ensure_ascii=False, indent=2, default=str)) def main(argv: list[str] | None = None) -> int: parser = argparse.ArgumentParser(description=__doc__) sub = parser.add_subparsers(dest="cmd", required=True) p_list = sub.add_parser("list", help="列出经验登记") p_list.add_argument("--work-id", type=int) p_list.add_argument("--status") p_list.add_argument("--kind") p_review = sub.add_parser("review", help="proposed → reviewing") p_review.add_argument("lesson_id", type=int) p_review.add_argument("--by", required=True, dest="decided_by") p_review.add_argument("--rationale", default=None) p_promote = sub.add_parser("promote", help="reviewing → promoted") p_promote.add_argument("lesson_id", type=int) p_promote.add_argument("--by", required=True, dest="decided_by") p_promote.add_argument("--target-type", required=True, choices=["pattern", "skill", "tool"]) p_promote.add_argument("--target-ref", required=True) p_promote.add_argument("--rationale", default=None) p_reject = sub.add_parser("reject", help="proposed/reviewing → rejected") p_reject.add_argument("lesson_id", type=int) p_reject.add_argument("--by", required=True, dest="decided_by") p_reject.add_argument("--rationale", default=None) args = parser.parse_args(argv) if args.cmd == "list": _print(list_lessons(work_id=args.work_id, status=args.status, kind=args.kind)) return 0 if args.cmd == "review": _print(start_review(args.lesson_id, decided_by=args.decided_by, rationale=args.rationale)) return 0 if args.cmd == "promote": _print(promote( args.lesson_id, decided_by=args.decided_by, target_type=args.target_type, target_ref=args.target_ref, rationale=args.rationale, )) return 0 if args.cmd == "reject": _print(reject(args.lesson_id, decided_by=args.decided_by, rationale=args.rationale)) return 0 return 2 if __name__ == "__main__": raise SystemExit(main())