67 """Attach registry-native plan subcommands."""
69 plan_parser.set_defaults(handler=_cmd_plan_group, plan_parser=plan_parser)
70 subcommands = plan_parser.add_subparsers(dest=
"plan_command")
72 create = subcommands.add_parser(
"create", help=
"Emit plan.create")
74 create.add_argument(
"plan_id")
75 create.add_argument(
"--plan-number", required=
True, type=int)
76 create.add_argument(
"--title", required=
True)
77 create.add_argument(
"--body-path", required=
True)
78 create.add_argument(
"--body-sha256", required=
True)
79 create.add_argument(
"--plan-type")
80 create.add_argument(
"--model-override")
81 create.add_argument(
"--thinking-override")
82 create.add_argument(
"--session-override")
83 create.set_defaults(handler=_cmd_create)
85 show = subcommands.add_parser(
"show", help=
"Show a projected plan row")
86 show.add_argument(
"plan_id")
87 show.add_argument(
"--registry", help=
"Registry SQLite path.")
88 show.add_argument(
"--json", action=
"store_true")
89 show.set_defaults(handler=_cmd_show)
91 set_status = subcommands.add_parser(
"set-status", help=
"Emit plan.set_status")
93 set_status.add_argument(
"plan_id")
94 set_status.add_argument(
"--from-status", required=
True)
95 set_status.add_argument(
"--to-status", required=
True)
96 set_status.add_argument(
99 choices=[
"worker_self",
"orchestrator",
"round_lifecycle"],
101 set_status.add_argument(
"--note")
102 set_status.set_defaults(handler=_cmd_set_status)
104 assign = subcommands.add_parser(
"assign", help=
"Emit plan.assign")
106 assign.add_argument(
"plan_id")
107 assign.add_argument(
"--from-slot")
108 assign.add_argument(
"--to-slot", required=
True)
109 assign.add_argument(
"--branch", required=
True)
110 assign.add_argument(
"--worktree", required=
True)
111 assign.add_argument(
"--queue-position", required=
True, type=int)
112 assign.set_defaults(handler=_cmd_assign)
114 supersede = subcommands.add_parser(
"supersede", help=
"Emit plan.supersede")
116 supersede.add_argument(
"plan_id")
117 supersede.add_argument(
"--by", required=
True, dest=
"superseded_by_plan_id")
118 supersede.add_argument(
"--reason", required=
True)
119 supersede.set_defaults(handler=_cmd_supersede)
121 reimport = subcommands.add_parser(
"reimport", help=
"Emit plan.reimport")
123 reimport.add_argument(
"plan_id")
124 reimport.add_argument(
"--previous-body-sha256", required=
True)
125 reimport.add_argument(
"--new-body-sha256", required=
True)
126 reimport.add_argument(
"--previous-body-observed-at", required=
True)
127 reimport.add_argument(
"--new-body-observed-at", required=
True)
128 reimport.set_defaults(handler=_cmd_reimport)
140 lambda registry, actor_slot: plan_create(
142 plan_id=args.plan_id,
143 plan_number=args.plan_number,
145 body_path=args.body_path,
146 body_sha256=args.body_sha256,
147 plan_type=args.plan_type,
148 model_override=args.model_override,
149 thinking_override=args.thinking_override,
150 session_override=args.session_override,
151 actor_slot=actor_slot,
152 actor_type=
"human_operator",
153 command=
"plan create",
174 lambda registry, actor_slot: plan_set_status(
176 plan_id=args.plan_id,
177 from_status=args.from_status,
178 to_status=args.to_status,
181 actor_slot=actor_slot,
182 actor_type=
"human_operator",
183 command=
"plan set-status",
191 lambda registry, actor_slot: plan_assign(
193 plan_id=args.plan_id,
194 from_slot=args.from_slot,
195 to_slot=args.to_slot,
197 worktree=args.worktree,
198 queue_position=args.queue_position,
199 actor_slot=actor_slot,
200 actor_type=
"human_operator",
201 command=
"plan assign",
224 lambda registry, actor_slot: plan_reimport(
226 plan_id=args.plan_id,
227 previous_body_sha256=args.previous_body_sha256,
228 new_body_sha256=args.new_body_sha256,
229 previous_body_observed_at=args.previous_body_observed_at,
230 new_body_observed_at=args.new_body_observed_at,
231 actor_slot=actor_slot,
232 actor_type=
"human_operator",
233 command=
"plan reimport",
239 args: argparse.Namespace,
240 emit: Callable[[Registry, str], object],
242 registry, backend =
_registry(args.registry)
243 actor_slot = args.actor_slot
or backend.active_operator_slot()
244 if actor_slot
is None:
245 print(
"no active operator slot found")
247 row = emit(registry, actor_slot)
248 print(f
"operation {getattr(row, 'id')} state_version={getattr(row, 'state_version')}")